一、FallbackValue用法
當增加了綁定語法時,有時綁定失敗了啥都不顯示,我們可能需要一些提示語句來提示我們綁定失敗,此時就用到了 FallbackValue。
下面我們來驗證它的作用。
注意事項:
如果綁定源屬性的 get 訪問器可能需要較長時間,請使用 IsAsync 屬性。 比如從 Web 上進行下載的 get 訪問器的圖像屬性。 將 IsAsync 設置為 true 可以避免在下載時阻塞UI。
示例如下:
1、創建了具有以下三個屬性的 AsyncDataSource 對象:FastDP、SlowerDP 和 SlowestDP

代碼如下:
public class AsyncDataSource { private string _fastDP; private string _slowerDP; private string _slowestDP; public AsyncDataSource() { } public string FastDP { get { return _fastDP; } set { _fastDP = value; } } public string SlowerDP { get { // This simulates a lengthy time before the // data being bound to is actualy available. Thread.Sleep(3000); return _slowerDP; } set { _slowerDP = value; } } public string SlowestDP { get { // This simulates a lengthy time before the // data being bound to is actualy available. Thread.Sleep(5000); return _slowestDP; } set { _slowestDP = value; } } }
2、在Xaml中的Text 屬性使用 PriorityBinding 綁定到上面的 AsyncDS:
<Window.Resources> <c:AsyncDataSource SlowestDP="Slowest Value" SlowerDP="Slower Value" FastDP="Fast Value" x:Key="AsyncDS" /> </Window.Resources> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" DataContext="{Binding Source={StaticResource AsyncDS}}"> <TextBlock FontSize="18" FontWeight="Bold" Margin="10" HorizontalAlignment="Center">Priority Binding</TextBlock> <TextBlock Background="Honeydew" Width="100" HorizontalAlignment="Center"> <TextBlock.Text> <PriorityBinding FallbackValue="Error"> <Binding Path="SlowestDP" IsAsync="True"/> 耗時操作時打開異步獲取屬性,防止阻塞UI <Binding Path="SlowerDP" IsAsync="True"/> <!--<Binding Path="FastDP" /> 為了驗證這句話先注釋掉,否則剛上來綁定到FastDP就直接顯示了 難以觀察到綁定失敗顯示defaultvalue的現象--> </PriorityBinding> </TextBlock.Text> </TextBlock> </StackPanel>
上面Xaml部分代碼中在TextBlock中依次綁定了SlowestDP、SlowerDP, 由於SlowerDP延時3秒鍾才能綁定成功所以此時應該是綁定失敗,則FallbackValue屬性就發揮作用了,界面會顯示Error。過了三秒鍾由於SlowerDP綁定成功了就顯示SlowerDP,到了5秒鍾就會顯示SlowestDP。

二、TargetNullValue用法
當獲取或設置源的值為 null 時將使用TargetNullValue的值。
示例如下:
1、Xaml中兩個Text分別綁定Index和Text

2、根據綁定的對象分別少初始化一個屬性

下面就列出缺少Index時,提示的信息為Index Null 正好為綁定里設置的TargetNullValue值。其他情況就不一一列出了。

三、DisplayMemberPath和SelectedValuePath
還是以上面例子為例,在Combox的綁定里分別設置了DisplayMemberPath和SelectedValuePath兩個屬性

這兩個值分別綁定到下圖的Index和Text:

DisplayMemberPath:是要顯示在界面上的數據
SelectedValuePath:設置SelectedValue時傳遞的值
SelectedValue:設置了SelectedValuePath時就是SelectedValuePath傳遞過來的值
最終結果如下圖:SelectedValuePath選擇的源傳遞給了SelectedValue

