<PMXU1> 这些链接现在似乎变得乱七八糟(Windows Client .NET链接甚至不再在DNS上解析)

<PMXU1>
这些链接现在似乎变得乱七八糟(Windows Client .NET链接甚至不再在DNS上解析)

WPF Databinding

谁能指出我一个好的资源(或给我一个提示),向我展示如何对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的另一个很好的资源:数据绑定概述。


    推荐阅读