WPF数据绑定
谁能指出我一个好的资源(或者给我一个提示),向我展示如何在WPF中对控件(ComboBox,ListBox等)进行数据绑定?当我把所有WinForms优点都从我身边拿走时,我有点茫然,而从一开始我就不是那么聪明...
解决方案
回答
我发现有关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可以使用" Binding"语法声明其绑定到的属性。
<ListBox Name="myListBox" Height="200" ItemsSource="{Binding Path=BookTable}" ItemTemplate ="{StaticResource BookItemTemplate}"/>
回答
我发现Windows Client .Net上的教程视频同样很棒。 Dot Net Rocks电视在一段时间之前也进行了报道。
回答
还有更多链接,以防万一以上内容不够用:
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属性。除了我们导入UpdateControls.XAML命名空间并将{Binding ...}替换为{u:Update ...}以外,XAML的工作原理与上述相同。