谁能给我指出一个好的资源(或给我一个线索)来告诉我如何对 WPF 中的控件(组合框、列表框等)进行数据绑定?当我所有的 WinForms 优点都被拿走时,我有点不知所措,而且我一开始也不是那么聪明......
6 回答
我为 WPF 数据绑定找到的最佳资源是Bea Costa 的博客。从第一篇文章开始并向前阅读。这很棒。
在后面的代码中——将列表框的 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}"/>
我发现Windows Client .Net上的教程视频同样棒极了。Dot Net Rocks TV前段时间也报道过。
还有一些链接,以防万一以上还不够:
Windows Presentation Foundation - 数据绑定操作方法主题
- 来自 MSDN 的大约 30 篇“操作方法”文章。
“本节中的主题描述了如何使用数据绑定将元素绑定到来自各种数据源的数据,这些数据以公共语言运行时 (CLR) 对象和 XML 的形式出现。”
一步一步地走向 WPF 数据绑定
- WPF 大师Josh Smith
“这篇文章解释了 WPF 数据绑定的绝对基础知识。它展示了如何执行相同简单任务的四种不同方式。每次迭代都更接近最紧凑的,可以仅实现 XAML。本文适用于没有 WPF 数据绑定经验的人。
这是 MSDN 的另一个很好的资源:数据绑定概述。
您需要做三件事:
- 将 ComboBox 的 ItemsSource 绑定到选项列表。
- 将 SelectedItem 绑定到保存选择的属性。
- 将 ComboBox.ItemTemplate 设置为 ComboBoxItem 的 DataTemplate。
因此,例如,如果您的数据上下文对象是一个拥有电子邮件地址的人,并且您想选择他们的主要地址,那么您可能有具有这些签名的类:
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>
现在您需要在 Person 和 EmailAddress 中实现 INotifyPropertyChanged。对于 EmailAddresses 集合,您可以使用 ObjservableCollection 支持它。
或者作为替代方案,您可以使用Update Controls .NET。这是一个替代数据绑定的开源项目,不需要 INotifyPropertyChanged。您可以使用任何有意义的集合来支持 EmailAddresses 属性。XAML 的工作方式与上述相同,只是您导入 UpdateControls.XAML 命名空间并将 {Binding ...} 替换为 {u:Update ...}。