Может кто-нибудь указать мне хороший ресурс (или дать подсказку), чтобы показать мне, как сделать привязку данных к элементам управления (ComboBox, ListBox и т. Д.) В WPF? Я в растерянности, когда все мои прелести WinForms отняты у меня, и я не настолько умен, чтобы начать с ...
Я нахожу обучающие видео в Windows Client .Net одинаково потрясающими. Dot Net Rocks TV также освещал это некоторое время назад.
Лучший ресурс, который я нашел для привязки данных WPF - это блог Беа Коста . Начните с первого поста и читайте дальше. Это круто
в коде позади - установите 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 может объявлять, к каким свойствам он привязывается, используя синтаксис «Binding».
<ListBox Name="myListBox" Height="200"
ItemsSource="{Binding Path=BookTable}"
ItemTemplate ="{StaticResource BookItemTemplate}"/>
И еще несколько ссылок, на случай, если вышеуказанного недостаточно:
Windows Presentation Foundation - Темы с практическими
рекомендациями по привязке данных - около 30 статей «Как сделать» из MSDN.
«В темах этого раздела описывается, как использовать привязку данных для привязки элементов к данным из различных источников данных в форме объектов общеязыковой среды выполнения (CLR) и XML».
Переход к привязке данных WPF по одному шагу
- от гуру WPF Джоша Смита
"В этой статье объясняются абсолютные основы привязки данных WPF. В ней показано четыре различных способа выполнения одной и той же простой задачи. Каждая итерация приближается к самой компактной, Возможна реализация только на XAML. Эта статья предназначена для людей, не имеющих опыта связывания данных WPF. "
Есть три вещи, которые вам нужно сделать:
- Свяжите ItemsSource ComboBox со списком параметров.
- Свяжите SelectedItem со свойством, которое содержит выбор.
- Установите 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 в Person и EmailAddress. Для коллекции EmailAddresses вы можете поддержать ее с помощью ObjservableCollection.
Или в качестве альтернативы вы можете использовать Update Controls .NET . Это проект с открытым исходным кодом, который заменяет привязку данных и не требует INotifyPropertyChanged. Вы можете использовать любую коллекцию, имеющую смысл для поддержки свойства EmailAddresses. XAML работает так же, как и выше, за исключением того, что вы импортируете пространство имен UpdateControls.XAML и замените {Binding ...} на {u: Update ...}.