1.Mode 綁定中數據流的方向(enum BindingMode)
目標屬性指的是控件的屬性
(1)TwoWay
更改源屬性或目標屬性時,會自動更新另一方。適用於可編輯窗體 例:TextBox
(2)OneWay
更改源屬性時會自動更新目標屬性。適用於隱形只讀窗體 例:Label
可避免 System.Windows.Data.BindingMode.TwoWay 綁定模式的系統開銷
(3)OneTime
在應用程序啟動或數據上下文更改時,更新綁定目標
如果你在適合使用當前狀態的快照或數據實際為靜態數據的位置使用數據,則此類型的綁定適合。 如果你想使用源屬性中的某個值來初始化目標屬性,且提前不知道數據上下文,則此類型的綁定也有用。
這是實質上是 System.Windows.Data.BindingMode.OneWay 綁定的一種簡化形式,它在源值不更改的情況下提供更好的性能。
(4)OneWayToSource
目標屬性更改時,會自動更新源屬性
(5)Default
使用綁定目標的默認 System.Windows.Data.Binding.Mode 值。 每個依賴屬性的默認值都不同。 通常,用戶可編輯的控件屬性(如文本框和復選框的控件屬性)默認為雙向綁定,而其他大多數屬性默認為單向綁定。確定依賴屬性綁定在默認情況下是單向還是雙向的編程方法是:使用 System.Windows.DependencyProperty.GetMetadata(System.Type)獲取屬性的屬性元數據,然后檢查 System.Windows.FrameworkPropertyMetadata.BindsTwoWayByDefault屬性的布爾值。
2.UpdateSourceTrigger 綁定源更新的計時(enum UpdateSourceTrigger)
(1)Default
綁定目標屬性的默認 System.Windows.Data.UpdateSourceTrigger 值。 大多數依賴屬性的默認值為 System.Windows.Data.UpdateSourceTrigger.PropertyChanged,而System.Windows.Controls.TextBox.Text 屬性的默認值為 System.Windows.Data.UpdateSourceTrigger.LostFocus。
(2)PropertyChanged
每當綁定目標屬性發生更改時,都會更新綁定源
(3)LostFocus
每當綁定目標元素失去焦點時,都會更新綁定源
(4)Explicit
僅在調用 System.Windows.Data.BindingExpression.UpdateSource 方法時更新綁定源
BindingExpression be = tbName.GetBindingExpression(TextBox.TextProperty); be.UpdateSource();
3.Converter 獲取或設置要使用的轉換器
WPF多值綁定及多值轉換(MultiBinding和IMultiValueConverter)
4.ElementName 要綁定的元素的名稱
Content="{Binding ElementName=lblTitle, Path=Content}"
5.Path 獲取或設置綁定源屬性的路徑
Content="{Binding ElementName=lblTitle, Path=Content}"
可以省略Path
Content="{Binding Content, ElementName=lblTitle}"
6.IsAsync 是否應異步獲取和設置值
這篇文章的例子很好: https://www.cnblogs.com/Aimeast/archive/2011/02/24/1963359.html
處理大批量的數據時,由於耗時操作,會造成界面的假死,這時需要進行異步操作。一般我們起線程就好了,而綁定屬性,只要設置了IsAsync就可以了。
(1)異步設置值
屬性:
private int status = 0;
public int Status
{
get { return status; }
set { Thread.Sleep(10000); status = value; RaisePropertyChanged("Status"); }
}
xaml:
<TextBox Text="{Binding Status,IsAsync=True}" HorizontalAlignment="Left" Height="23" Margin="243,208,0,0" VerticalAlignment="Top" Width="120"/>
<Label Content="{Binding Status}" HorizontalAlignment="Left" Height="23" Margin="243,256,0,0" VerticalAlignment="Top" Width="120"/>
效果:
沒使用IsAsync=True時,界面會假死10s,然后刷新label內容;使用后,界面不會假死,然后10s后刷新label內容
(2)異步獲取值
屬性:
private int status = 0; public int Status { get { Thread.Sleep(10000); return status; } set { status = value; RaisePropertyChanged("Status"); } }
xaml:
<Label Content="{Binding Status,IsAsync=True}" HorizontalAlignment="Left" Height="23" Margin="243,256,0,0" VerticalAlignment="Top" Width="120"/>
效果:
因為 “控件綁定綁定的屬性,值獲取后控件才開始顯示刷新”,所以設置異步之前Status的get完成后,Label的才顯示刷新,會假死10s。