2008-08-11 103 views
11

任何人都可以指向我一个很好的资源(或抛出一个线索),告诉我如何在WPF中的DataBinding控件(组合框,列表框等)?当我所有的WinForms优点都从我手中夺走时,我有点不知所措,而且我并不是那么光明......WPF Databinding

回答

3

我发现在Windows Client .Net同样很棒的教程视频。前段时间,Dot Net Rocks TV也覆盖了它。

+0

这些链接现在看起来很乱(Windows Client .NET链接甚至无法在DNS上解析) – Ortund 2017-07-03 14:59:56

5

我发现WPF数据绑定的最佳资源是Bea Costa's blog。从第一篇文章开始阅读。这很棒。

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 Presentation Foundation - Data Binding How-to Topics
- 约30从MSDN“如何做”的文章。
“在本节中的主题描述了如何使用数据绑定到从各种在公共语言运行库(CLR)对象和XML形式的数据源的结合元件,以数据”。

Moving Toward WPF Data Binding One Step at a Time
- 从WPF guru Josh Smith
“这篇文章解释了WPF数据绑定的绝对基础知识,它展示了如何执行同一个简单任务的四种不同方式,每一次迭代更接近最紧凑的仅有XAML的实现。没有WPF数据绑定的经验。“

2

有你需要做三件事情:

  1. 绑定组合框的选项列表的的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集合,您可以使用ObjservableCollection将其返回。

或者作为替代方案,您可以使用Update Controls .NET。这是一个替代数据绑定并且不需要INotifyPropertyChanged的开源项目。您可以使用任何有意义的集合来支持EmailAddresses属性。除了导入UpdateControls.XAML命名空间并将{Binding ...}替换为{u:Update ...}之外,XAML的工作方式与上述相同。