属性验证
在定义任何类型的属性时,都需要面对错误设置属性的可能性,对于传统的.Net属性,可尝试在属性设置其中捕获这类问题,但对于依赖项属性而言,这种方法不合适,因为可能通过WPF属性系统使用SetValue()方法直接设置属性。
– ValidateValueCallback:该回调函数可接受或拒绝新值。通常,该回调函数用于捕获违反属性约束的明显错误,可作为DependencyProperty.Register()方法的一个参数提供该回调函数。
– CoerceValueCallback:该回调函数可将新值修改为更能被接受的值。该回调函数通常用于处理为相同对象设置的依赖项属性值相互冲突的问题,这些值本身可能是合法的,但当同时应用时他们是不相容的。为了使用这个回调函数,当创建FrameworkPropertyMetadata对象时,作为构造函数的一个参数提供该回调函数。
当应用程序试图设置依赖项属性时,所有这些内容的作用过程:
1. 首先,CoerceValueCallback方法有机会修改提供的值,或者返回DependencyProperty.UnsetValue,这回完全拒绝修改。
2. 接下来激活ValidateValueCallback方法。该方法返回true以接受一个值作为合法值,或者返回false拒绝值。与CoerceValueCallback方法不同,ValidateValueCallback方法不能访问设置属性的事迹对象,这意味着您不能检查其他属性值。
3. 最后,如果前两个阶段都获得成功,就会触发PropertyChangedCallback方法。此时,如果希望为其他类提供通知,可以引发更改事件。