WPF数据绑定

时间:2020-03-05 18:38:53  来源:igfitidea点击:

谁能指出我一个好的资源(或者给我一个提示),向我展示如何在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的工作原理与上述相同。