Кто-либо может указать на меня на хороший ресурс (или бросить меня подсказка) показать мне, как сделать DataBinding к средствам управления (ComboBox, ListBox, и т.д.) в WPF? Я в чем-то вроде потери, когда у всего моего WinForms niceities отнимают меня, и я не все это яркое для запуска с...
Я нахожу учебные видео в Windows Client .NET одинаково потрясающий. ТВ Dot-Net-Rocks также покрыло его некоторое время назад.
Лучший ресурс, который я нашел для привязки данных WPF, является блогом Bea Costa. Запустите с первого сообщения и читайте вперед. Это является потрясающим.
Вот другой хороший ресурс из MSDN: Обзор Привязки данных.
в коде позади - устанавливает 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 Name="myListBox" Height="200"
ItemsSource="{Binding Path=BookTable}"
ItemTemplate ="{StaticResource BookItemTemplate}"/>
И еще некоторые ссылки, на всякий случай вышеупомянутое не было достаточно:
Windows Presentation Foundation - темы практического руководства привязки данных
- Приблизительно 30 статей 'How To' из MSDN.
"Темы в этом разделе описывают, как использовать привязку данных для привязки элементов с данными из множества источников данных в форме объектов общеязыковой среды выполнения (CLR) и XML".
Перемещение к привязке данных WPF один шаг за один раз
- Гуру WPF Josh Smith
"Эта статья объясняет абсолютные основы привязки данных WPF. Это показывает четыре различных пути, как выполнить ту же простую задачу. Каждое повторение придвигается поближе к самому компактному, XAML-только возможной реализации. Эта статья для людей без опыта в привязке данных WPF".
Существует три вещи, которые необходимо сделать:
Так, например, если Ваш объект контекста данных является человеком, имеющим адреса электронной почты, и Вы хотите выбрать их основное устройство, у Вас могли бы быть классы с этими подписями:
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.
Или как альтернатива можно использовать Средства управления Обновлением.NET. Это - проект с открытым исходным кодом, который заменяет привязку данных и не требует INotifyPropertyChanged. Можно использовать любой набор, имеет смысл поддерживать свойство EmailAddresses. XAML работает то же как выше, за исключением того, что Вы импортируете UpdateControls. Пространство имен XAML и замена {Привязка...} с {u:Update...}.