当我们在定义一个依赖属性的时候,通常是需要重写属性元数据,以便做我们想做的工作。

声明一个依赖属性的示例:

    public static readonly DependencyProperty MyProperty = DependencyProperty.Register(nameof(My), typeof(string), typeof(MyControl), new PropertyMetadata(null,     
    PropertyChangedCallback, OnCoerceValueCallback)ValidateValueCallback);

PropertyChangedCallback 表示属性变更后的回调,通常用于属性值被改变后,执行对应的业务逻辑。 CoerceValueCallback 表示属性变更前的回调,通常用来做数据类型转换。(当然也可以做些其它的事情) ValidateValueCallback 表示数据验证回调,通常用来验证数据的有效性。

调用顺序:ValidateValueCallback -> OnCoerceValueCallback -> PropertyChangedCallback

针对 CoerceValueCallback 举个例子:

我们通常在xaml代码中,会给Image.Source赋个值,并且是纯字符串。但是,我们的Image控件都能很好的把字符串转成我们要到对象ImageSource。转换的过程,总不可能把这个工作交给xaml解析器吧,那不然这个解析器,还不得炸锅了~

所以呢,依赖属性元数据里面,使用 CoerceValueCallback,可以帮助我们在数据改变之前,做一些想做的操作,通常可以用它来做一些数据类型转换。

欢迎转载分享,请关注微信公众号,将同步更新博客,方便查看!

承哥技术交流小作坊


本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/WPF-DependencyProperty-%E5%9B%9E%E8%B0%83%E7%94%A8%E9%80%94.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系