WPF:数据绑定--PriorityBinding优先级绑定

PriorityBinding优先级绑定

实现效果:

  1. 成功返回值的第一个绑定成为活动绑定
  2. 绑定引擎继续侦听所有绑定的变化。 如果任意时刻具有较高优先级的某个绑定成功返回值,则该绑定的值将成为活动值,并替换当前值。

clipboard.png

clipboard.png

关键词:

  1. PriorityBinding+FallbackValue
  2. IsAsync

代码:
绑定数据进行赋值

<local:AsyncDataSource SlowestDp="Slowest Value" SlowerDp="Slower Value"
               FastDp="Fast Value" x:Key="AsyncDs" />

当具有最高优先级的绑定需要很长时间来计算时,将使用能够成功返回一个值的次高优先级,直到具有较高优先级的绑定成功返回一个值。
在等待值到达的过程中,绑定会报告 FallbackValue(如果有)或绑定目标属性的默认值。

<TextBlock.Text>
    <PriorityBinding FallbackValue="defaultvalue">
        <Binding Path="SlowestDp" IsAsync="True"/>
        <Binding Path="SlowerDp" IsAsync="True"/>
        <Binding Path="FastDp" />
    </PriorityBinding>
</TextBlock.Text>

FastDP 的 get 访问器返回 _fastDP 数据成员的值。
SlowerDP 的 get 访问器等待 3 秒钟之后返回 _slowerDP 数据成员的值。
SlowestDP 的 get 访问器等待 5 秒钟之后返回 _slowestDP 数据成员的值。

public class AsyncDataSource
{
    private string _slowerDp;
    private string _slowestDp;
    public string FastDp { get; set; }

    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; }
    }
}

扩展:

  1. 如果在处理具有最高优先级的绑定时成功返回了一个值,则说明永远不需要处理该列表中的其他绑定。
  2. 如果绑定源属性的 get 访问器可能需要较长时间,请使用 IsAsync 属性。 一个示例是具有从 Web 上进行下载的 get 访问器的图像属性。 将 IsAsync 设置为 true 可以避免在下载发生时阻止 UI。
  3. .NET 准则建议您定义运算速度比字段集慢多个数量级的属性。 在创建类时,请考虑在 get 访问器之外处理执行速度极慢的操作并缓存结果。
  4. BindingBase.FallbackValue 属性:获取或设置当绑定无法返回值时要使用的值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值