我不了解WPF中的各种数据绑定模式,例如:
这些模式的含义是什么?
什么时候应该使用?
答案 0 :(得分:124)
OneWay
:当您希望绑定属性更新用户界面时使用此选项。TwoWay
:此行为与OneWay
和OneWayToSource
相同。绑定属性将更新用户界面,用户界面中的更改将更新绑定属性(例如,您将使用TextBox
或Checkbox
。)OneTime
:这与OneWay
具有相同的行为,但它只会更新用户界面一次。这应该是绑定的默认选择(由于各种原因我不在这里详细说明),如果你真的需要额外的功能,你应该只使用其他类型的绑定。OneWayToSource
:这与OneWay
相反 - 用户界面值更改更新绑定属性。如果您未指定任何内容,则行为将取决于您正在使用的控件。
有关详细信息,请参阅BindingMode
enum on MSDN。
答案 1 :(得分:30)
绑定由两个实体组成:
目标必须是DependencyObject
(用于绑定工作),源可以是DependencyObject
,或者应该有一些机制来模仿WPF绑定系统有关它的更改(实现) INotifyPropetyChnaged
接口)。
MVVM建议ViewModel项目不受任何与View相关的引用的影响,因此建议使用INotifyPropertyChanged
接口使WPF绑定能够听到Source对象。
绑定发生在 Source 的属性和 Target 的属性之间(必须是DependencyProperty
)。
例如TextProperty
类的TextBox
是视图模型的DataBound到(例如)UserName
属性。
WPF绑定提供了四种类型的绑定。请记住,绑定在UI线程上运行,除非您指定它以其他方式运行。
UserName
属性,它将反映在文本框中。这是中间成本,因为绑定系统仅监视来源进行更改。TextProperty
和UserName
属性都将保持同步,如果更改,则会相互更新。这是最昂贵的,因为绑定系统必须观察双方的变化。TextProperty
,则UserName
属性将占用更改后的值。这也是中间成本,因为绑定系统仅监视目标进行更改。Label
,TextBlock
等。如果您没有提及任何内容,则每个目标属性都有一个与其自身关联的默认绑定模式。例如。 TextProperty
的{{1}}默认绑定模式为TextBox
。对于TwoWay
的{{1}},它是单向的。
建议您选择正确的模式,因为它可以帮助您减少应用程序延迟,尤其是在您的UI中有大量控件的情况下。
关于MVVM的更多信息here是我写的一篇文章。