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:


  "Slowest Value" SlowerDP="Slower Value"
                     FastDP="Fast Value" x:Key="AsyncDS" />

    
"Center" VerticalAlignment="Center"
  DataContext="{Binding Source={StaticResource AsyncDS}}">
  "18" FontWeight="Bold" Margin="10"
    HorizontalAlignment="Center">Priority Binding
  "Honeydew" Width="100" HorizontalAlignment="Center">
    
      "Error">
        "SlowestDP" IsAsync="True"/> 耗时操作时打开异步获取属性,防止阻塞UI
        "SlowerDP" IsAsync="True"/>
        
      
    
      

上面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