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

 

 

posted @ 2021-11-25 21:46  岳振威  阅读(1863)  评论(0编辑  收藏  举报