目的:整理WPF中Bind的寫法
<!--綁定到DataContext--> <Button Content="{Binding DataTime}"/> <!--綁定到DataContext,並設置綁定模式--> <Button x:Name="btn" Content="{Binding DataTime,Mode=OneTime}"/> <!--綁定到DataContext,並設置更新模式--> <Button Content="{Binding DataTime,UpdateSourceTrigger=PropertyChanged}"/> <!--綁定到DataContext,並設置轉換模式--> <Button Content="{Binding DataTime,Converter={StaticResource ConvertResource},ConverterParameter=btn1}"/> <!--綁定到Element中指定屬性--> <Button Content="{Binding ElementName=btn,Path=Content}"/> <!--綁定到相對位置中的自身模式--> <Button Content="{Binding RelativeSource={RelativeSource Mode=Self},Path=Tag}" Tag="MyTag"/> <!--綁定到相對位置中的父級別查找模式--> <Button Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window},Path=Content}"/> <!--綁定到相對位置中的父級別查找模式 綁定到指定類型--> <Button Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window},Path=Content}"/> <!--綁定到相對位置中的父級別查找模式 綁定到指定層級--> <Button Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorLevel=2},Path=Content}"/> <!--綁定到相對位置中的父級別查找模式 綁定到模板內容--> <Button Content="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=Content}"/>
在使用Binding類的時候有4中綁定模式可以選擇
BindingMode
TwoWay:
導致對源屬性或目標屬性的更改可自動更新對方。此綁定類型適用於可編輯窗體或其他完全交互式 UI 方案。
OneWay:
當綁定源(源)更改時,更新綁定目標(目標)屬性。如果要綁定的控件為隱式只讀控件,則適用此綁定類型。例如,可以綁定到如股市代號之類的源。或者,可能目標屬性沒有用於進行更改(例如表的數據綁定背景色)的控件接口。如果不需要監視目標屬性的更改,則使用 OneWay 綁定模式可避免 TwoWay 綁定模式的系統開銷。
OneTime:
當應用程序啟動或數據上下文更改時,更新綁定目標。此綁定類型適用於以下情況:使用當前狀態的快照適合使用的或數據狀態實際為靜態的數據。如果要從源屬性初始化具有某個值的目標屬性,並且事先不知道數據上下文,則也可以使用此綁定類型。實質上,這是 OneWay 綁定的較簡單的形式,它在不更改源值的情況下可提供更好的性能。
OneWayToSource :
當目標屬性更改時更新源屬性。
Default:
使用綁定目標的默認 Mode 值。每個依賴項屬性的默認值都不同。一般情況下,用戶可編輯控件屬性(例如文本框和復選框的屬性)默認為雙向綁定,而多數其他屬性默認為單向綁定。確定依賴項屬性綁定在默認情況下是單向還是雙向的編程方法是:使用 GetMetadata 來獲取屬性的屬性元數據,然后檢查 BindsTwoWayByDefault 屬性的布爾值。
使用 Mode 屬性指定綁定的方向。以下枚舉列表列出了可供綁定更新的選項:
-
無論是目標屬性還是源屬性,只要發生了更改,TwoWay 就會更新目標屬性或源屬性。
-
OneWay 僅當源屬性發生更改時更新目標屬性。
-
OneTime 僅當應用程序啟動時或 DataContext 進行更改時更新目標屬性。
-
OneWayToSource 在目標屬性更改時更新源屬性。
-
Default:使用目標屬性的默認 Mode 值。
仍然使用上個文章中的文本框,標簽控件,以及滾動條來說明綁定模式不同
1。使用twoway方式綁定以后,如果手動更改textbox的值,此時如果通過按鈕事件來查看滾動條的value值,就會發現和textbox是一致
2。oneway方式,就是滾動條改變的時候會改變文本框的顯示值,但是文本框更改的時候不會更改滾動條的值
3。onetime方法,會發現文本框的值會是滾動條的初始值。而且不會變化
4。onewaytosource。就是文本框更改的時候會改變源的屬性。這個時候其實數據源和數據目標已經顛倒過來了
5。default方式,這個方式完全就是根據控件的屬性來設置的。有的屬性適合twoway方式,比如交互的UI控件,有點只能oneway方式