WPF有哪些不同的绑定模式?

106

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

  • 单向绑定
  • 双向绑定
  • 单次绑定
  • 等等...

每个模式代表什么意思?

何时应该使用它们?

2个回答

193
  • OneWay: 当您希望绑定属性更新用户界面时,请使用此选项。
  • TwoWay: 具有与 OneWayOneWayToSource 相同的行为。绑定的属性将更新用户界面,用户界面中的更改也会更新绑定的属性(例如,您可以将其用于 TextBoxCheckbox)。
  • OneTime: 具有与 OneWay 相同的行为,但它只会更新用户界面一次。这应该是您绑定的默认选择(出于各种原因,我这里不再详述)。仅在实际需要额外功能时才使用其他类型的绑定。
  • OneWayToSource: 与 OneWay 相反 -- 用户界面值更改会更新绑定的属性。

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

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


谢谢,这很有帮助... 但请说明双向绑定的示例...我想知道它如何反映在代码后面。 - DATT OZA
2
@DATT:您所说的“指定”,是什么意思?基本上,如果在XAML中设置Mode=TwoWay,在更改GUI值时,它将自动更新C#属性。但是您的代码后台中的属性需要在实现INotifyPropertyChanged接口的类(如ViewModel)中实现。当代码后台通过set更改属性的值时,您需要调用PropertyChanged,以便通知GUI该值已更改,并且它将自动更新自己。 - Dave
1
如果您没有指定任何内容,那么行为将取决于您使用的属性。 - Mauro Sampietro

48

一个绑定由两个实体组成:

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

目标必须是DependencyObject(为了使绑定工作),源可以是DependencyObject,或者它应该有一些机制来模拟WPF绑定系统,表明它已经被改变(实现INotifyPropetyChnaged接口)。


MVVM建议ViewModel项目不受任何视图相关引用的限制,因此建议使用INotifyPropertyChanged接口使源对象被WPF绑定系统感知。 绑定发生在的属性和目标的属性之间(必须是DependencyProperty)。 例如:TextBox类的TextProperty绑定到视图模型的UserName属性。 WPF绑定提供四种绑定类型。请记住,除非您另外指定,否则绑定将在UI线程上运行。

  1. OneWay:目标属性将侦听源属性的更改并更新自己。如果您以编程方式更改了ViewModel的UserName属性,则会反映在文本框中。这是中等代价,因为绑定系统仅监听的更改。
  2. TwoWay:目标属性将侦听源属性的更改并更新自己。同时,源属性将侦听目标属性的更改并更新自己。如果其中一个属性更改,TextPropertyUserName属性都将保持同步并相互更新。这是最昂贵的,因为绑定系统必须同时观察两个方面的变化。
  • OneWayToSource: 如果目标属性被更改,则源属性也会随之更改。如果用户更改了TextProperty,则UserName属性将采用更改后的值。这种绑定成本较高,因为绑定系统只监视目标的更改。
  • OneTime: 这仅在绑定的生命周期中发生一次,当绑定发生时,目标属性将使用属性进行更新。这是最少成本的,适用于需要显示静态数据的场景,例如LabelTextBlock等。
  • 如果您没有说明任何内容,每个目标属性都有与其关联的默认绑定模式。例如,TextBoxTextProperty的默认绑定模式为TwoWay。对于TextBlockTextProperty,它是单向的。

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

    有关MVVM的更多信息,请查看我写的这里的文章。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接