谁能指出我一个好的资源(或给我一个提示),向我展示如何对WPF中的控件(ComboBox,ListBox等)进行数据绑定? 当我拿走所有WinForms精美软件时,我有点茫然,而从一开始我就不是那么聪明...
我发现有关WPF数据绑定的最佳资源是Bea Costa的博客。从第一篇文章开始,并继续阅读。这很棒。
还有更多链接,以防万一以上内容不足:
Windows Presentation Foundation-数据绑定方法主题
-大约30条来自MSDN的"如何做"文章。
"本节中的主题描述了如何使用数据绑定以公共语言运行时(CLR)对象和XML的形式将元素绑定到来自各种数据源的数据。"
一次迈向WPF数据绑定一步
-由WPF大师Josh Smith提供
"本文解释了WPF数据绑定的绝对基础。它展示了如何执行相同的简单任务的四种不同方式。每次迭代都接近于最紧凑的,仅XAML的实现。本文适用于没有WPF经验的人数据绑定。"
我发现Windows Client .Net上的教程视频同样很棒。 Dot Net Rocks电视在一段时间之前也进行了报道。
在后面的代码中-将列表框的DataContext设置为要绑定到的集合。
1 2 3 4 5 6 7 8
| 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"语法声明其绑定到的属性。
1 2 3
| <ListBox Name="myListBox" Height="200"
ItemsSource="{Binding Path=BookTable}"
ItemTemplate ="{StaticResource BookItemTemplate}"/> |
您需要做三件事:
将ComboBox的ItemsSource绑定到选项列表。
将SelectedItem绑定到保存选择的属性。
将ComboBox.ItemTemplate设置为ComboBoxItem的DataTemplate。
因此,例如,如果您的数据上下文对象是一个拥有电子邮件地址的人,并且您想选择其主要对象,则您可能拥有带有以下签名的类:
1 2 3 4 5 6 7 8 9 10
| public class EmailAddress
{
public string AddressAsString { get; set; }
}
public class Person
{
public IEnumerable<EmailAddress> EmailAddresses { get; }
public EmailAddress MainEmailAddress { get; set; }
} |
然后,您可以创建如下所示的组合框:
1 2 3 4 5 6 7
| <ComboBox ItemsSource="{Binding EmailAddresses}" SelectedItem="{Binding MainEmailAddress}">
<ComboBox.ItemTemplate>
<DataTemplate>
<ComboBoxItem Content="{Binding AddressAsString}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox> |
现在,您需要在Person和EmailAddress中都实现INotifyPropertyChanged。对于EmailAddresses集合,您可以使用ObjservableCollection支持它。
或者,您也可以使用Update Controls .NET。这是一个开源项目,它将替换数据绑定,并且不需要INotifyPropertyChanged。您可以使用任何有意义的集合来备份EmailAddresses属性。除了导入UpdateControls.XAML命名空间并将{Binding ...}替换为{u:Update ...}以外,XAML的工作原理与上述相同。
这是MSDN的另一个很好的资源:数据绑定概述。