我不理解WPF中各种数据绑定模式,例如:
- 单向绑定
- 双向绑定
- 单次绑定
- 等等...
每个模式代表什么意思?
何时应该使用它们?
我不理解WPF中各种数据绑定模式,例如:
每个模式代表什么意思?
何时应该使用它们?
OneWay
: 当您希望绑定属性更新用户界面时,请使用此选项。TwoWay
: 具有与 OneWay
和 OneWayToSource
相同的行为。绑定的属性将更新用户界面,用户界面中的更改也会更新绑定的属性(例如,您可以将其用于 TextBox
或 Checkbox
)。OneTime
: 具有与 OneWay
相同的行为,但它只会更新用户界面一次。这应该是您绑定的默认选择(出于各种原因,我这里不再详述)。仅在实际需要额外功能时才使用其他类型的绑定。OneWayToSource
: 与 OneWay
相反 -- 用户界面值更改会更新绑定的属性。如果未指定任何内容,则行为将取决于所使用的控件。
有关更多信息,请参见Microsoft Docs上的 BindingMode
枚举。
一个绑定由两个实体组成:
目标必须是DependencyObject
(为了使绑定工作),源可以是DependencyObject
,或者它应该有一些机制来模拟WPF绑定系统,表明它已经被改变(实现INotifyPropetyChnaged
接口)。
MVVM建议ViewModel项目不受任何视图相关引用的限制,因此建议使用INotifyPropertyChanged
接口使源对象被WPF绑定系统感知。
绑定发生在源的属性和目标的属性之间(必须是DependencyProperty
)。
例如:TextBox
类的TextProperty
绑定到视图模型的UserName
属性。
WPF绑定提供四种绑定类型。请记住,除非您另外指定,否则绑定将在UI线程上运行。
UserName
属性,则会反映在文本框中。这是中等代价,因为绑定系统仅监听源的更改。TextProperty
和UserName
属性都将保持同步并相互更新。这是最昂贵的,因为绑定系统必须同时观察两个方面的变化。TextProperty
,则UserName
属性将采用更改后的值。这种绑定成本较高,因为绑定系统只监视目标的更改。Label
、TextBlock
等。如果您没有说明任何内容,每个目标属性都有与其关联的默认绑定模式。例如,TextBox
的TextProperty
的默认绑定模式为TwoWay
。对于TextBlock
的TextProperty
,它是单向的。
建议选择正确的绑定模式,因为它可以帮助您减少应用程序的延迟,特别是在您的UI中有大量控件的情况下。
有关MVVM的更多信息,请查看我写的这里的文章。