2008-08-11 2 views
11

Может ли кто-нибудь указать мне хороший ресурс (или бросить мне ключ), чтобы показать мне, как сделать DataBinding для элементов управления (ComboBox, ListBox и т. Д.) В WPF? Я немного потерял, когда все мои стили WinForms были отняты у меня, и я не настолько яркий, чтобы начать с ...WPF Databinding

ответ

3

Я нахожу обучающие видеоролики в Windows Client .Net одинаково замечательными. Dot Net Rocks TV также покрыл его некоторое время назад.

+0

эти ссылки, кажется, теперь тарабарщины (ссылка Windows Client .NET даже не разрешает DNS) – Ortund 2017-07-03 14:59:56

5

Лучший ресурс, который я нашел для привязки данных WPF, - это Bea Costa's blog. Начните с первого сообщения и прочитайте вперед. Это потрясающе.

3

в коде позади - установите DataContext вашего списка, равного коллекции, к которой вы привязываетесь.

private void OnInit(object sender, EventArgs e) 
{ 
    //myDataSet is some IEnumerable 

    // myListBox is a ListBox control. 
    // Set the DataContext of the ListBox to myDataSet 
    myListBox.DataContext = myDataSet; 
} 

В XAML Listbox может объявлять, какие свойства он связывает с использованием синтаксиса «Связывание».

<ListBox Name="myListBox" Height="200" 
    ItemsSource="{Binding Path=BookTable}" 
    ItemTemplate ="{StaticResource BookItemTemplate}"/> 
3

и некоторые другие ссылки, только в том случае, выше не хватало:

Windows Presentation Foundation - Data Binding How-to Topics
- около 30 «как» статьи из MSDN.
«Темы в этом разделе описано, как использовать привязку данных для привязки элементов к данным из различных источников данных в виде общеязыковой среды выполнения (CLR) объектов и XML.»

Moving Toward WPF Data Binding One Step at a Time
- По WPF гуру Josh Smith
В этой статье объясняются абсолютные основы привязки данных WPF. В ней показаны четыре разных способа выполнения одной и той же простой задачи. Каждая итерация приближается к самой компактной реализации XAML. Эта статья предназначена для людей с нет опыта в привязке данных WPF ».

2

Есть три вещи, которые нужно сделать:

  1. Свяжите ItemsSource из ComboBox в списке опций.
  2. Привяжите выбранный элемент к свойству, которое содержит выделение.
  3. Установите ComboBox.ItemTemplate в DataTemplate для ComboBoxItem.

Так, например, если контекст данных объект является лицом, адрес электронной почты, и вы хотите, чтобы выбрать их первичные, вы могли бы иметь классы с этими подписями:

public class EmailAddress 
{ 
    public string AddressAsString { get; set; } 
} 

public class Person 
{ 
    public IEnumerable<EmailAddress> EmailAddresses { get; } 
    public EmailAddress MainEmailAddress { get; set; } 
} 

Тогда вы могли бы создать комбинированное окно как это:

<ComboBox ItemsSource="{Binding EmailAddresses}" SelectedItem="{Binding MainEmailAddress}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <ComboBoxItem Content="{Binding AddressAsString}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Теперь вам нужно реализовать INotifyPropertyChanged как в личности и EmailAddress. Для коллекции EmailAddresses вы можете вернуть ее с помощью ObjservableCollection.

Или в качестве альтернативы вы можете использовать Update Controls .NET. Это проект с открытым исходным кодом, который заменяет привязку данных и не требует INotifyPropertyChanged.Вы можете использовать любую коллекцию, чтобы вернуть свойство EmailAddresses. XAML работает так же, как и выше, за исключением того, что вы импортируете пространство имен UpdateControls.XAML и заменяете {Binding ...} на {u: Update ...}.