当我们在定义一个依赖属性的时候,通常是需要重写属性元数据,以便做我们想做的工作。
声明一个依赖属性的示例:
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/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。