WPF数据绑定

11

有没有人能为我提供一个好的资源(或者给我一些提示),告诉我如何在 WPF 中对控件(ComboBox、ListBox 等)进行数据绑定?当我失去所有 WinForms 的好东西时,我有点莫名其妙,而且一开始就不是很聪明...

6个回答

5

我发现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可以使用“Binding”语法声明它绑定到哪些属性。
<ListBox Name="myListBox" Height="200"
  ItemsSource="{Binding Path=BookTable}"
  ItemTemplate  ="{StaticResource BookItemTemplate}"/>

3

这些链接现在看起来像是无意义的字符(Windows客户端.NET链接甚至无法解析DNS)。 - Ortund

3

如果上面的内容还不够,这里有更多链接:

Windows Presentation Foundation - 数据绑定教程
- 大约30篇来自MSDN的“如何”文章。
“本节中的主题描述了如何使用数据绑定将元素绑定到各种数据源中的数据,这些数据以公共语言运行时(CLR)对象和XML的形式存在。”

一步一步接近WPF数据绑定
- 由WPF专家Josh Smith撰写
“本文解释了WPF数据绑定的绝对基础知识。它展示了四种不同的方法来执行相同的简单任务。每个迭代都更接近最紧凑的仅限XAML实现。本文适用于没有WPF数据绑定经验的人。”


2
您需要做三件事情:
  1. 将ComboBox的ItemsSource绑定到选项列表。
  2. 将SelectedItem绑定到保存选择的属性。
  3. 将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集合,您可以使用ObservableCollection进行支持。
或者作为替代方案,您可以使用Update Controls .NET。这是一个开源项目,可以替换数据绑定,并且不需要INotifyPropertyChanged。您可以使用任何集合来支持EmailAddresses属性。XAML的工作方式与上述相同,只是您需要导入UpdateControls.XAML命名空间,并将{Binding ...}替换为{u:Update ...}。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接