PriorityBinding优先级绑定
实现效果:
- 成功返回值的第一个绑定成为活动绑定
- 绑定引擎继续侦听所有绑定的变化。 如果任意时刻具有较高优先级的某个绑定成功返回值,则该绑定的值将成为活动值,并替换当前值。
关键词:
- PriorityBinding+FallbackValue
- 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; }
}
}
扩展:
- 如果在处理具有最高优先级的绑定时成功返回了一个值,则说明永远不需要处理该列表中的其他绑定。
- 如果绑定源属性的 get 访问器可能需要较长时间,请使用 IsAsync 属性。 一个示例是具有从 Web 上进行下载的 get 访问器的图像属性。 将 IsAsync 设置为 true 可以避免在下载发生时阻止 UI。
- .NET 准则建议您定义运算速度比字段集慢多个数量级的属性。 在创建类时,请考虑在 get 访问器之外处理执行速度极慢的操作并缓存结果。
- BindingBase.FallbackValue 属性:获取或设置当绑定无法返回值时要使用的值。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。