各种WPF绑定模式有哪些?

时间:2010-02-21 07:21:56

标签: wpf data-binding

我不了解WPF中的各种数据绑定模式,例如:

  • 单向
  • 双向
  • 一次性
  • 等...

这些模式的含义是什么?

什么时候应该使用?

2 个答案:

答案 0 :(得分:124)

  • OneWay:当您希望绑定属性更新用户界面时使用此选项。
  • TwoWay:此行为与OneWayOneWayToSource相同。绑定属性将更新用户界面,用户界面中的更改将更新绑定属性(例如,您将使用TextBoxCheckbox。)
  • OneTime:这与OneWay具有相同的行为,但它只会更新用户界面一次。这应该是绑定的默认选择(由于各种原因我不在这里详细说明),如果你真的需要额外的功能,你应该只使用其他类型的绑定。
  • OneWayToSource:这与OneWay相反 - 用户界面值更改更新绑定属性。

如果您未指定任何内容,则行为将取决于您正在使用的控件。

有关详细信息,请参阅BindingMode enum on MSDN

答案 1 :(得分:30)

绑定由两个实体组成:

  1. 源(通常是MVVM方案中的ViewModel)
  2. 目标(UI控件)
  3. 目标必须是DependencyObject(用于绑定工作),源可以是DependencyObject,或者应该有一些机制来模仿WPF绑定系统有关它的更改(实现) INotifyPropetyChnaged接口)。

    MVVM建议ViewModel项目不受任何与View相关的引用的影响,因此建议使用INotifyPropertyChanged接口使WPF绑定能够听到Source对象。 绑定发生在 Source 的属性和 Target 的属性之间(必须是DependencyProperty)。 例如TextProperty类的TextBox是视图模型的DataBound到(例如)UserName属性。 WPF绑定提供了四种类型的绑定。请记住,绑定在UI线程上运行,除非您指定它以其他方式运行。

    1. OneWay 目标属性将侦听要更改的源属性并自行更新。如果以编程方式更改ViewwModel的UserName属性,它将反映在文本框中。这是中间成本,因为绑定系统仅监视来源进行更改。
    2. TwoWay :target属性将侦听要更改的源属性并自行更新。 AND source属性将侦听正在更改的目标属性并将自行更新。 TextPropertyUserName属性都将保持同步,如果更改,则会相互更新。这是最昂贵的,因为绑定系统必须观察双方的变化。
    3. OneWayToSource :如果更改目标属性,Source属性将更改。如果用户更改了TextProperty,则UserName属性将占用更改后的值。这也是中间成本,因为绑定系统仅监视目标进行更改。
    4. OneTime :在Binding的生命周期内只发生一次,当Binding发生时,目标属性将使用属性进行更新。这是最便宜的,适用于要显示静态数据的情况,例如: LabelTextBlock等。
    5. 如果您没有提及任何内容,则每个目标属性都有一个与其自身关联的默认绑定模式。例如。 TextProperty的{​​{1}}默认绑定模式为TextBox。对于TwoWay的{​​{1}},它是单向的。

      建议您选择正确的模式,因为它可以帮助您减少应用程序延迟,尤其是在您的UI中有大量控件的情况下。

      关于MVVM的更多信息here是我写的一篇文章。