【问题标题】:WPF DatabindingWPF 数据绑定
【发布时间】:2008-08-11 01:34:34
【问题描述】:

谁能给我指出一个好的资源(或给我一个线索)来告诉我如何在 WPF 中对控件(组合框、列表框等)进行数据绑定?当我所有的 WinForms 优点都被拿走时,我有点不知所措,而且我一开始也不是那么聪明......

【问题讨论】:

    标签: wpf data-binding


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这些链接现在似乎是乱码(Windows 客户端 .NET 链接甚至无法在 DNS 上解析)
      【解决方案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}"/>
      

      【讨论】:

        【解决方案4】:

        还有一些链接,以防以上内容不够:

        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 经验的人数据绑定。”

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            你需要做三件事:

            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 集合,您可以使用 ObjservableCollection 支持它。

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

            【讨论】:

              猜你喜欢
              • 2017-01-10
              • 1970-01-01
              • 2010-10-30
              • 2015-05-24
              • 2015-06-23
              • 2012-12-28
              • 2015-11-23
              • 2011-01-01
              • 2010-11-04
              相关资源
              最近更新 更多