2010-02-21 87 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是我寫的一篇文章。