文章目录
在应用程序开发当中我们大量的数据都是binding绑定的。但我们可能是会出现绑定失败的时候,或者绑定值为Null时,的处理方式。其中绑定数据中,可能我们有些数据需要加载,过程中可能卡死我们的UI。可以使用属性IsAsync,当它为True的时候就会异步加载数据不会堵塞UI
binding是什么?
示例:binding是基于一种数据绑定,该工具是为了解决显示在后端属性的内容。
如上的后端源码是
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new AsyncDataSource();
}
}
public class AsyncDataSource
{
public AsyncDataSource()
{
TEXT = "绑定成功";
}
public string TEXT { get; set; }
}
如上的图显示它是成功绑定并显示了,“绑定成功”
FallbackValue 的使用
我们模拟它数据的绑定失败
1 将上方原有的TEXT改为TEXTS 前端绑定写法不变
public AsyncDataSource()
{
TEXTS = "绑定成功";
}
public string TEXTS{ get; set; }
2 设置Binding 后面属性FallbackValue 设置其绑定失败的默认值
<StackPanel>
<TextBlock FontSize="50" Text="内容" />
<TextBlock FontSize="50" Text="{Binding TEXT,FallbackValue=我}" />
</StackPanel>
程序运行效果
如上所示:就是展示 的FallbackValue的简单的使用
稍微进阶写法:
<StackPanel>
<TextBlock FontSize="50" Text="内容" />
<TextBlock FontSize="50">
<TextBlock.Text>
<PriorityBinding FallbackValue="绑定失败显示">
<Binding IsAsync="True" Path="BindingText2" />
<!-- 将异步的放在下方将没有延时显示的效果 -->
<Binding IsAsync="False" Path="BindingText1" />
</PriorityBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock FontSize="50">
<TextBlock.Text>
<PriorityBinding FallbackValue="绑定失败显示">
<Binding IsAsync="True" Path="BindingText2" />
</PriorityBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
后端代码修改为
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new AsyncDataSource();
}
}
public class AsyncDataSource
{
//private string _slowerDP="延时3秒";
//private string _slowestDP = "延时6秒";
private string binding= "绑定内容";
public string BindingText1
{
get { return binding; }
set { binding = value; }
}
private string binding2 ="延时2秒显示";
public string BindingText2
{
get {
Thread.Sleep(TimeSpan.FromSeconds(2));//延时 加载2秒
return binding2; }
set { binding2 = value; }
}
public AsyncDataSource()
{
TEXTS = "绑定成功";
}
public string TEXTS{ get; set; }
}
效果
TargetNullValue的使用
TargetNullValue就是程序在绑定数据,之后数据的值是null,那么程序显示的值就是您的默认值。与上面的FallbackValue绑定的方式不同,它是绑定失败了就显示您设定的那个值。
我们来看个示例
前端绑定属性Values1 和 Values2 其中Values1为int类型其中Values2为string 类型
<StackPanel>
<TextBlock FontSize="50" Text="{Binding Values1,TargetNullValue=10}" />
<TextBlock FontSize="50" Text="{Binding Values2,TargetNullValue=10}" />
</StackPanel>
private int values1;
public int Values1
{
get { return values1; }
set { values1 = value; }
}
private string values2="默认值";
public string Values2
{
get { return values2; }
set { values2 = value; }
}
我们运行程序
其中前面这个 0就是我们程序绑定好的属性,其为什么它是显示的0
1 我们在它的显示属性Text 中写了指定其值为null的时候为10 TargetNullValue=10
2 它是int类型,int 类型的值默认是0
3 我们在后端并没有赋值,所以其值就是0 如果是string类型我们没有赋初始值,那么就是我们 TargetNullValue 指向的值