什么是各种WPF绑定模式?
我不明白WPF中的各种数据绑定模式,例如:
- 单程
- 双向
- 一次
- 等等…
每种模式都意味着什么?
什么时候应该使用?
-
OneWay
:当你想绑定属性更新用户界面时使用这个。 -
TwoWay
:这与OneWay
和OneWayToSource
组合方式相同。 绑定属性将更新用户界面,并且用户界面中的更改将更新绑定属性(例如,您可以将其与TextBox
或Checkbox
使用)。 -
OneTime
:这与OneWay
具有相同的行为,除了一次只会更新用户界面。 这应该是你的绑定的默认select(由于各种原因,我不会在这里详细说明),如果你真的需要额外的function,你应该只使用其他types的绑定。 -
OneWayToSource
:这与OneWay
相反 – 用户界面值更改更新绑定属性。
如果您不指定任何内容,则行为将取决于您正在使用的控件。
有关更多信息,请参见MSDN上的BindingMode
枚举 。
绑定包含两个实体:
- 源代码(通常MVVM场景中的ViewModel)
- 目标(UI控件)
目标必须是一个DependencyObject
(用于绑定到工作),源可以是一个DependencyObject
或者它应该有一些模仿WPF绑定系统的机制(实现INotifyPropetyChnaged
接口)。
MVVMbuild议将ViewModel项目从任何View相关引用中解放出来,因此build议使用INotifyPropertyChanged
接口来使WPF绑定能够听到Source对象。 绑定发生在Source的属性和Target的属性之间(必须是DependencyProperty
)。 例如, TextBox
类的TextProperty
是DataBound(比如说)视图模型的UserName
属性。 WPF绑定提供了四种types的绑定。 请记住,绑定在UI线程上运行,除非另有指定,否则运行。
- 单向 : 目标属性将侦听正在更改的源属性,并将自行更新。 如果以编程方式更改ViewwModel的
UserName
属性,它将反映在文本框中。 这是中间成本,因为绑定系统仅监视Source的变化。 - 双向 :目标属性将听取被更改的源属性,并将自行更新。 AND源属性将侦听正在更改的目标属性,并将自行更新。
TextProperty
和UserName
属性都将保持同步,并且如果更改,将会相互更新。 这是最昂贵的,因为绑定系统必须观察双方的变化。 - OneWayToSource :如果目标属性被更改,Source属性将会改变。 如果用户更改了
TextProperty
,则UserName
属性将占用更改的值。 这也是中间成本,因为绑定系统仅仅监视目标的变化。 - 一次性 :在绑定的生命周期中只发生一次,发生绑定时, Target属性将更新为Source属性。 这是成本最低的,对于那些需要显示静态数据的场景比如
Label
,TextBlock
等
如果您不提及任何内容,则每个目标属性都有一个与其自身相关联的默认绑定模式。 例如TextBox
的TextProperty
的默认绑定模式为TwoWay
。 对于TextBlock
的TextProperty
,这是一种方法。
build议您select正确的模式,因为它可以帮助您减less应用程序延迟,特别是在UI中有大量控件的情况下。
有关MVVM的更多信息,请参阅我写的文章。