Как создать DataTemplate в коде c #?

Я пытаюсь создать выпадающий список для взаимодействия winform, и я создаю выпадающее меню. Тем не менее, у меня возникла проблема с привязкой данных к базе данных, указанным в DataTemplate.

Что мне не хватает?

drpCreditCardNumberWpf = new ComboBox(); DataTemplate cardLayout = new DataTemplate {DataType = typeof (CreditCardPayment)}; StackPanel sp = new StackPanel { Orientation = System.Windows.Controls.Orientation.Vertical }; TextBlock cardHolder = new TextBlock {ToolTip = "Card Holder Name"}; cardHolder.SetBinding(TextBlock.TextProperty, "BillToName"); sp.Children.Add(cardHolder); TextBlock cardNumber = new TextBlock {ToolTip = "Credit Card Number"}; cardNumber.SetBinding(TextBlock.TextProperty, "SafeNumber"); sp.Children.Add(cardNumber); TextBlock notes = new TextBlock {ToolTip = "Notes"}; notes.SetBinding(TextBlock.TextProperty, "Notes"); sp.Children.Add(notes); cardLayout.Resources.Add(sp, null); drpCreditCardNumberWpf.ItemTemplate = cardLayout; 

Предполагая, что вы уже создали ItemsSource т. Д. Для drpCreditCardNumberWpf

 //create the data template DataTemplate cardLayout = new DataTemplate(); cardLayout.DataType = typeof(CreditCardPayment); //set up the stack panel FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(StackPanel)); spFactory.Name = "myComboFactory"; spFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal); //set up the card holder textblock FrameworkElementFactory cardHolder = new FrameworkElementFactory(typeof(TextBlock)); cardHolder.SetBinding(TextBlock.TextProperty, new Binding("BillToName")); cardHolder.SetValue(TextBlock.ToolTipProperty, "Card Holder Name"); spFactory.AppendChild(cardHolder); //set up the card number textblock FrameworkElementFactory cardNumber = new FrameworkElementFactory(typeof(TextBlock)); cardNumber.SetBinding(TextBlock.TextProperty, new Binding("SafeNumber")); cardNumber.SetValue(TextBlock.ToolTipProperty, "Credit Card Number"); spFactory.AppendChild(cardNumber); //set up the notes textblock FrameworkElementFactory notes = new FrameworkElementFactory(typeof(TextBlock)); notes.SetBinding(TextBlock.TextProperty, new Binding("Notes")); notes.SetValue(TextBlock.ToolTipProperty, "Notes"); spFactory.AppendChild(notes); //set the visual tree of the data template cardLayout.VisualTree = spFactory; //set the item template to be our shiny new data template drpCreditCardNumberWpf.ItemTemplate = cardLayout; 

Вы можете использовать то же самое, как я установил ToolTip в TextBlock s для установки других свойств, таких как поля.

Ну, действительно, у нас все еще есть другой способ, вам действительно понравится, если вам не понравятся вещи FrameworkElementFactory .

И я думаю, что это просто делает незначительные изменения в естественном коде, то есть объявляет UserControl и вставляет в него свой контроль, а затем использует только один FrameworkElementFactory для вызова UserControl .

Простой демонстрационный код (в F #):

 let buildView()=StackPanel() //Build it with natural code type MyView()=inherit UserControl(Content=buildView()) let factory=FrameworkElementFactory(typeof) let template=DataTemplate(VisualTree=factory) let list=ItemsControl(ItemsSource=makeData(),ItemTemplate=template) 
  • Измените элементы управления WPF из не основного streamа с помощью Dispatcher.Invoke
  • Что такое ответ Java на WPF?
  • Как сделать управление наложением выше всех других элементов управления?
  • Нумерованный список
  • Как заполнить сетку WPF на основе двумерного массива
  • Горячие клавиши в WPF
  • Шифрование учетных данных в приложении WPF
  • Как реализовать навигационную кнопку в общих ресурсах приложений?
  • Событие ComboBox - SelectionChanged имеет старое значение, а не новое значение
  • Шаблон управления существующими элементами управления в WPF
  • Связывание RelativeSource с помощью ToolTip или ContextMenu
  • Давайте будем гением компьютера.