Как создать 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) 
  • WindowsFormsHost всегда самый верхний элемент WPF
  • Как вы одушевляете линию на canvasе в C #?
  • Шаблон управления существующими элементами управления в WPF
  • Как приложение Metro в Windows 8 взаимодействует с настольным настольным окном на одном компьютере?
  • Форматирование текста в TextBlock
  • Изображение кнопки мыши WPF
  • В моем приложении WPF мой загруженный логотип PNG на изображении отображается во время разработки, но не во время выполнения
  • программно добавлять столбцы и строки в WPF Datagrid
  • Привязка видимости кнопки к значению bool в ViewModel
  • Выберите диалог папки WPF
  • Что означает «{x: Static}» в XAML?
  • Давайте будем гением компьютера.