【问题标题】:Can databinding in WPF be done simply with a dataview like in winforms?WPF 中的数据绑定可以简单地使用 winforms 中的数据视图完成吗?
【发布时间】:2012-06-15 17:40:05
【问题描述】:

简短的问题。在 Winforms 中,您可以通过以下方式将数据视图绑定到组合框或其他控件:

combobox.DataSource = dataview
combobox.DisplayMember = "Something"

在 WPF 中,我通常使用 ObservableCollection 完成数据绑定并编辑 xaml。有没有办法像上面那样快速做到这一点?

编辑: 这似乎是我能想到的最简单/最快的事情,它本身有什么问题吗?

combobox.ItemSource = dataview
combobox.DisplayMemberPath = "Something"

【问题讨论】:

  • 你这样做是在欺骗自己。正确使用 INotifyPropertyChanged 和 ObserveableCollections 将对您产生巨大的影响。实现起来有点复杂,但从长远来看,它会为您简化事情,而且功能更强大。
  • @Yatrix 感谢您的意见,数据绑定远非我的专长,但您能否详细说明一下您说它更强大并且从长远来看会简化事情的意思?
  • 如果您使用我提到的界面和集合,当您更改集合中任何项目的属性时,它会自动更新 UI 中的项目。这意味着您不必手动管理编辑或 UI 更新,从而简化了管理数据呈现的长期前景。一般来说,像winform一样使用WPF是没有意义的。 WPF 提供了许多 winform 没有的功能,其中大部分功能可以通过一些专有技术在标记中完成。它确实是一个很棒的工具,但它是对 winforms 的重大调整。

标签: wpf vb.net winforms


【解决方案1】:

您可以以编程方式设置绑定,但根据我对 MVVM 模式的理解,最佳做法是在视图 (xaml) 中设置绑定,而不是在 ViewModel 或 View 代码隐藏中。

如何以编程方式设置绑定:

Binding myBinding = new Binding("Name");
myBinding.Source = dataview // data source from your example

combobox.DisplayMemberPath = "Something"
combobox.SetBinding(ComboBox.ItemsSourceProperty, myBinding);

这样,当您的数据视图更新时,更新将显示在您的 ComboBox 中。

【讨论】:

    【解决方案2】:

    你可以这样做:

    List<Person> someListOFPersons = new List<Person>();
    comboBox.DataContext = someListOfPersons;
    comboBox.DisplayMemberPath = "FirstName";
    

    您不会看到集合中的变化。因此,如果一个人被添加到列表中或从列表中删除,组合框将看不到它。

    【讨论】:

    • 感谢您的建议,但我想我可能找到了更简单的方法。由于我想要一个数据视图,我可以将 ItemSource 设置为数据视图,然后 DisplayMemberPath
    • 我只是选择了List作为例子,你可以绑定任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2011-02-22
    • 1970-01-01
    • 2010-12-16
    • 2011-12-01
    相关资源
    最近更新 更多