1、綁定模型的理解
每個綁定都始終遵循下圖所示的模型:
每個綁定都具有四個要素:綁定目標對象、目標屬性、綁定源對象,以及要使用的綁定源中的值的路徑
下面以一個例子來分析一下,如下所示,將一個文本輸入框和一個叫Name的屬性綁定起來:
<TextBox Margin="10" Height="50" Text="{Binding Path=Name, Mode=TwoWay}" ></TextBox>
<!--Input1是定義在Employee這個類對象中的屬性,這里就不把Employee寫出來了-->
綁定目標對象:TextBox
目標屬性:Text
綁定源對象:Employee對象(即Name這個屬性所在的位置)
綁定源的值的路徑:Name,也可以理解為將哪個值綁定到目標屬性上
2、Mode模式使用說明
在使用Binding類的時候有4中綁定模式可以選擇
TwoWay | 導致對源屬性或目標屬性的更改可自動更新對方。此綁定類型適用於可編輯窗體或其他完全交互式 UI 方案。 |
OneWay | 當綁定源(源)更改時,更新綁定目標(目標)屬性。如果要綁定的控件為隱式只讀控件,則適用此綁定類型。例如,可以綁定到如股市代號之類的源。或者,可能目標屬性沒有用於進行更改(例如表的數據綁定背景色)的控件接口。如果不需要監視目標屬性的更改,則使用 OneWay 綁定模式可避免 TwoWay 綁定模式的系統開銷。 |
OneTime | 當應用程序啟動或數據上下文更改時,更新綁定目標。此綁定類型適用於以下情況:使用當前狀態的快照適合使用的或數據狀態實際為靜態的數據。如果要從源屬性初始化具有某個值的目標屬性,並且事先不知道數據上下文,則也可以使用此綁定類型。實質上,這是 OneWay 綁定的較簡單的形式,它在不更改源值的情況下可提供更好的性能。 |
OneWayToSource | 當目標屬性更改時更新源屬性。 |
Default | 使用綁定目標的默認 Mode 值。每個依賴項屬性的默認值都不同。一般情況下,用戶可編輯控件屬性(例如文本框和復選框的屬性)默認為雙向綁定,而多數其他屬性默認為單向綁定。確定依賴項屬性綁定在默認情況下是單向還是雙向的編程方法是:使用 GetMetadata 來獲取屬性的屬性元數據,然后檢查 BindsTwoWayByDefault 屬性的布爾值。 |
下面采用一個例子進行說明:將TextBox的文本和Slider的滑塊綁定到一起:
1 <TextBox Margin="10" Height="50" Text="{Binding Path=Value ,ElementName=slider }"></TextBox> 2 <Slider Minimum="0" Maximum="100" IsSnapToTickEnabled="True" BorderThickness="1" Name="slider" Margin="10" Height="50" />
1、Default:Texbox與slider的值變化會互相改變對方
2、TwoWay:對於TextBox來說Default的默認方式就是Default。所以效果同上。
3、OneWay:slider變化會改變TextBox文本,但是TextBox值變化不會反映到slider上
4、OneWayToSource:TextBox值變化會改變slider,但是slider不會改變TextBox