Может ли кто-нибудь указать мне хороший ресурс (или бросить мне ключ), чтобы показать мне, как сделать DataBinding для элементов управления (ComboBox, ListBox и т.д.) в WPF? Я нахожусь в убытке, когда все мои достоинства WinForms отняты у меня, и я не настолько яркий, чтобы начать с...
WPF Databinding
Ответ 1
Я нахожу обучающие видеоролики в Windows Client.Net одинаково потрясающим. Dot Net Rocks TV также покрыл его некоторое время назад.
Ответ 2
Лучший ресурс, который я нашел для привязки данных WPF, - блог Bea Costa. Начните с первого сообщения и прочитайте вперед. Это потрясающе.
Ответ 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}"/>
Ответ 4
И еще несколько ссылок, на всякий случай выше этого не хватило:
Windows Presentation Foundation - Практические советы по привязке данных
- Около 30 статей "Как" из MSDN.
Темы в этом разделе описывают, как использовать привязку данных для привязки элементов к данным из разных источников данных в виде объектов CLR и XML.
Переход к привязке данных WPF за один шаг за шагом
- Гуру WPF Джош Смит
"В этой статье объясняются абсолютные основы привязки данных WPF.Она показывает четыре разных способа выполнения одной и той же простой задачи: каждая итерация приближается к самой компактной реализации XAML. Эта статья предназначена для людей без опыта работы в WPF привязка данных".
Ответ 5
Вот еще один хороший ресурс из MSDN: Обзор привязки данных.
Ответ 6
Вам нужно сделать три вещи:
- Привязать 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...}.