WPF绑定模式有哪些?


86

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

  • 单程
  • 双向
  • 一度
  • 等等...

这些模式分别是什么意思?

什么时候应该使用它们?

Answers:


159
  • OneWay:当您希望bound属性更新用户界面时,请使用它。
  • TwoWay:这与OneWay和具有相同的行为OneWayToSource。bound属性将更新用户界面,并且用户界面中的更改将更新bound属性(例如,您可以将其与TextBox或一起使用Checkbox。)
  • OneTime:这具有与行为相同的行为,OneWay除了只会更新用户界面一次。这应该是绑定的默认选择(由于各种原因,我将在这里不做详细介绍),如果您确实需要额外的功能,则只能使用其他类型的绑定。
  • OneWayToSource:这与OneWay-相反-用户界面值更改会更新bound属性。

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

有关更多信息,请参见BindingModeMSDN上的枚举


谢谢。这很有帮助...但是请指定TwoWay示例...我想知道其如何反映代码的背后。
2010年

2
@DATT:“指定”是什么意思?基本上,如果在XAML中设置Mode = TwoWay,则在更改GUI值时,它将自动更新C#属性。但是,您需要在代码背后的属性中实现INotifyPropertyChanged接口的类(例如ViewModel)。当后面的代码通过set更改属性的值时,您需要调用PropertyChanged,以便GUI收到有关值更改的通知,并且GUI会自动更新。
戴夫

1
如果您未指定任何内容,则行为将取决于您所使用的属性。
Mauro Sampietro

37

绑定由两个实体组成:

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

目标必须是一个DependencyObject(用于绑定才能工作),源必须是一个,DependencyObject或者源必须具有某种机制来模仿有关更改的WPF绑定系统(INotifyPropetyChnaged实现接口)。


MVVM建议ViewModel项目中不包含任何与View相关的引用,因此建议使用INotifyPropertyChangedinterface使WPF绑定听到Source对象。绑定发生在Source属性和Target属性之间(必须是DependencyProperty)。例如TextPropertyTextBox该类的是UserName视图模型的DataBound(say)属性。WPF绑定提供四种类型的绑定。记住,除非在其他情况下指定绑定运行,否则绑定将在UI线程上运行。

  1. OneWay目标属性将侦听源属性的更改并自行更新。如果以编程方式更改ViewwModel的UserName属性,它将反映在文本框中。这是中等成本,因为装订系统仅监视更改
  2. TwoWay:目标属性将侦听更改的源属性并自行更新。AND source属性将侦听目标属性的更改,并将对其进行自我更新。TextPropertyUserName属性将保持同步,并且如果两者发生更改,则彼此会更新。这是最昂贵的,因为装订系统必须注意双方的变化。
  3. OneWayToSource:如果更改目标属性,则Source属性将更改。如果用户更改了TextProperty,则该UserName属性将使用更改后的值。这又是中间成本,因为装订系统仅监视目标以进行更改。
  4. OneTime:在绑定的整个生命周期内仅发生一次,在绑定发生时,Target属性将使用Source属性进行更新。这是成本最低的,是可取的,你有静态的数据显示如场景LabelTextBlock等等。

如果您什么都没有提及,则每个目标属性都有一个与之关联的默认绑定模式。例如,TextProperty的的TextBox默认绑定模式为TwoWay。对于TextPropertyTextBlock是一种方法。

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

有关MVVM的更多信息,是我写的一篇文章。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.