C# WPF FallbackValue和TargetNullValue用法以及Combox的DisplayMemberPath和SelectedValuePath用法


一、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中依次綁定了SlowestDPSlowerDP, 由於SlowerDP延時3秒鍾才能綁定成功所以此時應該是綁定失敗,則FallbackValue屬性就發揮作用了,界面會顯示Error。過了三秒鍾由於SlowerDP綁定成功了就顯示SlowerDP,到了5秒鍾就會顯示SlowestDP。

 

 

 

 

二、TargetNullValue用法

當獲取或設置源的值為 null 時將使用TargetNullValue的值。

示例如下:

1、Xaml中兩個Text分別綁定Index和Text

 

 

 

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

 

 

 

 

 

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

 

 

三、DisplayMemberPath和SelectedValuePath

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

 

 

 

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

 

 

 

 

DisplayMemberPath:是要顯示在界面上的數據

SelectedValuePath:設置SelectedValue時傳遞的值

SelectedValue:設置了SelectedValuePath時就是SelectedValuePath傳遞過來的值

 

最終結果如下圖:SelectedValuePath選擇的源傳遞給了SelectedValue

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM