什么是各种WPF绑定模式?

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

  • 单程
  • 双向
  • 一次
  • 等等…

每种模式都意味着什么?

什么时候应该使用?

  • OneWay :当你想绑定属性更新用户界面时使用这个。
  • TwoWay :这与OneWayOneWayToSource组合方式相同。 绑定属性将更新用户界面,并且用户界面中的更改将更新绑定属性(例如,您可以将其与TextBoxCheckbox使用)。
  • OneTime :这与OneWay具有相同的行为,除了一次只会更新用户界面。 这应该是你的绑定的默认select(由于各种原因,我不会在这里详细说明),如果你真的需要额外的function,你应该只使用其他types的绑定。
  • OneWayToSource :这与OneWay相反 – 用户界面值更改更新绑定属性。

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

有关更多信息,请参见MSDN上的BindingMode枚举 。

绑定包含两个实体:

  1. 源代码(通常MVVM场景中的ViewModel)
  2. 目标(UI控件)

目标必须是一个DependencyObject (用于绑定到工作),源可以是一个DependencyObject或者它应该有一些模仿WPF绑定系统的机制(实现INotifyPropetyChnaged接口)。


MVVMbuild议将ViewModel项目从任何View相关引用中解放出来,因此build议使用INotifyPropertyChanged接口来使WPF绑定能够听到Source对象。 绑定发生在Source的属性和Target的属性之间(必须是DependencyProperty )。 例如, TextBox类的TextProperty是DataBound(比如说)视图模型的UserName属性。 WPF绑定提供了四种types的绑定。 请记住,绑定在UI线程上运行,除非另有指定,否则运行。

  1. 单向目标属性将侦听正在更改的源属性,并将自行更新。 如果以编程方式更改ViewwModel的UserName属性,它将反映在文本框中。 这是中间成本,因为绑定系统仅监视Source的变化。
  2. 双向 :目标属性将听取被更改的源属性,并将自行更新。 AND源属性将侦听正在更改的目标属性,并将自行更新。 TextPropertyUserName属性都将保持同步,并且如果更改,将会相互更新。 这是最昂贵的,因为绑定系统必须观察双方的变化。
  3. OneWayToSource :如果目标属性被更改,Source属性将会改变。 如果用户更改了TextProperty ,则UserName属性将占用更改的值。 这也是中间成本,因为绑定系统仅仅监视目标的变化。
  4. 一次性 :在绑定的生命周期中只发生一次,发生绑定时, Target属性将更新为Source属性。 这是成本最低的,对于那些需要显示静态数据的场景比如LabelTextBlock

如果您不提及任何内容,则每个目标属性都有一个与其自身相关联的默认绑定模式。 例如TextBoxTextProperty的默认绑定模式为TwoWay 。 对于TextBlockTextProperty ,这是一种方法。

build议您select正确的模式,因为它可以帮助您减less应用程序延迟,特别是在UI中有大量控件的情况下。

有关MVVM的更多信息,请参阅我写的文章。