高级数据绑定与自定义控件开发
1. 高级绑定功能之优先绑定(PriorityBinding)
1.1 优先绑定的应用场景
优先绑定(PriorityBinding)适用于多种场景。比如在网页加载图片时,在图片下载完成前,会先显示占位符,接着是简短描述,最后才显示真实图片。在数据绑定中,如果想让控件最终显示图片,但图片下载需要时间,就可以为要显示的项目提供多个不同来源,如图片、图片说明文本和默认图像。若一个来源不可用,代码可以依次尝试下一个来源。
另一个场景是作用域相关的情况。若用户指定了值,就使用该值;若用户未指定,而管理员指定了值,则使用管理员指定的值;若都没有指定,就使用默认值。
1.2 优先绑定的使用方法
优先绑定可以替代任何常规绑定。它包含一个其他绑定的列表,会逐个遍历这些绑定,直到获取到返回数据的绑定。由于底层的属性系统,如果某个绑定最终获取到数据(例如图像加载完成),它将自动更新属性。
1.3 颜色选择器示例
以颜色选择器为例,当前以十六进制值显示颜色,若所选颜色有名称,希望显示名称而非十六进制值。可以使用多个值转换器,根据“最佳”(或至少是第一个)显示结果进行展示。
首先,需要一个值转换器来判断颜色是否为命名颜色,代码如下:
using System; using System.Collections.Generic; using System.Windows.Data; using System.Windows; using System.Windows.Media; us