实习笔记 WPF中FallbackValue和TargetNullValue用法

文章目录

在应用程序开发当中我们大量的数据都是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 指向的值

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学软件开发的猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值