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中依次绑定了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
本文来自博客园,作者:岳振威,转载请注明原文链接:https://www.cnblogs.com/yzw123/p/15605119.html