WPF数据绑定

时间:2008-08-11 01:34:35

标签: wpf data-binding

有人能指出我一个好的资源(或给我一个线索),告诉我如何在WPF中对控件(ComboBox,ListBox等)进行DataBinding操作吗?当我的所有WinForms好处都被我带走时,我有点失落,而且从一开始就不是那么光明......

6 个答案:

答案 0 :(得分:5)

我找到的WPF数据绑定的最佳资源是Bea Costa's blog。从第一篇文章开始,然后向前阅读。太棒了。

答案 1 :(得分: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可以使用“绑定”语法声明它绑定到哪个属性。

<ListBox Name="myListBox" Height="200"
  ItemsSource="{Binding Path=BookTable}"
  ItemTemplate  ="{StaticResource BookItemTemplate}"/>

答案 2 :(得分:3)

我发现Windows Client .Net上的教程视频同样棒极了。 Dot Net Rocks TV前段时间也已经介绍过它。

答案 3 :(得分:3)

以及更多链接,以防上述情况不足:

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

Moving Toward WPF Data Binding One Step at a Time
- 由WPF大师Josh Smith
“本文解释了WPF数据绑定的绝对基础。它展示了如何执行相同简单任务的四种不同方式。每次迭代都更接近于最紧凑,仅限XAML的实现。本文适用于没有WPF经验的人员数据绑定。“

答案 4 :(得分:2)

这是来自MSDN的另一个好资源:Data Binding Overview

答案 5 :(得分:2)

您需要做三件事:

  1. 将ComboBox的ItemsSource绑定到选项列表。
  2. 将SelectedItem绑定到包含所选内容的属性。
  3. 将ComboBox.ItemTemplate设置为ComboBoxItem的DataTemplate。
  4. 因此,例如,如果您的数据上下文对象是具有电子邮件地址的人,并且您想要选择其主要内容,则可能包含具有这些签名的类:

    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的工作原理与上述相同。