2010-02-21 57 views

回答

81
  • OneWay:当你想绑定的属性来更新用户界面使用此功能。
  • TwoWay:这与OneWayOneWayToSource相同。绑定属性将更新用户界面,并在用户界面的变化将更新绑定属性
  • OneTime(你会使用这个具有TextBox或例如Checkbox):这有相同的行为OneWay除了它会只更新一次用户界面。这应该是您绑定的默认选择(出于各种原因,这里我不会详细说明),如果您确实需要额外的功能,则应该只使用其他类型的绑定。
  • OneWayToSource:这与OneWay相反 - 用户界面值更改会更新绑定属性。

如果您不指定任何内容,则行为将取决于您使用的控件。请参阅BindingMode enum on MSDN

+0

谢谢。这是有帮助的... 但PLZ指定TwoWay的例子...我想知道它如何反映代码隐藏。 – 2010-02-21 08:27:47

+1

@DATT:“指定”是什么意思?基本上,如果在XAML中设置Mode = TwoWay,当您更改GUI值时,它将自动更新C#属性。但是您的代码隐藏属性需要在实现INotifyPropertyChanged接口的类(如ViewModel)中实现。当代码隐藏通过设置更改属性的值时,您需要调用PropertyChanged,以便通知GUI该值更改,并自动更新它自己。 – Dave 2010-02-21 21:45:33

+0

如果您未指定任何内容,则行为将取决于您正在使用的“属性”。 – sam 2016-03-21 08:35:36

16

A结合由两个实体组成:

  1. 的源(典型视图模型中MVVM场景)
  2. 的目标(UI控制)

目标具有成为DependencyObject(用于绑定工作),并且源可以是DependencyObject或者它应该有一些模仿WPF绑定系统的机制m关于它被改变(实现INotifyPropetyChnaged接口)。


MVVM建议视图模型项目是从任何查看相关引用免费,因此建议使用INotifyPropertyChanged界面,使通过WPF结合正在审理源对象。 绑定发生在来源属性和属性目标(必须是DependencyProperty)。 例如TextBox类的TextProperty是DataBound到(说)UserName视图模型的属性。 WPF绑定提供了四种类型的绑定。请记住,绑定在UI线程上运行,除非您指定它以其他方式运行。

  1. 单向:该目标属性会听源属性被更改,并会自动更新。如果以编程方式更改ViewwModel的UserName属性,它将反映在文本框中。这是中间成本,因为绑定系统仅针对来源进行更改。
  2. 双向:target属性会听源属性被更改,并会自动更新。 AND source属性将侦听正在更改的目标属性并将自行更新。 TextPropertyUserName属性都将保持同步,并且会在更改时互相更新。这是最昂贵的,因为绑定系统必须观察双方的变化。
  3. OneWayToSource:如果目标属性更改Source属性会发生变化。如果用户更改TextProperty,则UserName属性将占用更改的值。这也是中间成本,因为绑定系统仅针对目标进行更改。
  4. 一次性:此结合,在目标属性将与源时绑定发生更新财产一生中只发生一次。这种方法成本最低,适用于需要显示静态数据的情况。 LabelTextBlock

如果你不提任何东西,每目标财产具有的与其自身相关的默认绑定模式。例如。 TextBoxTextProperty的默认绑定模式为TwoWay。对于TextBlockTextProperty这是一种方式。

您选择合适的模式,因为它可以帮助你减少特别是在你有你的UI大量的控制情况下的应用程序延迟这是不可取的。

更多关于MVVM here是我写的一篇文章。