我们建议不要向依赖属性包装器的访问器方法添加行为,因为它们可以通过直接调用 Get/SetValue 来绕过。
好的,这很合理。那么我们把这种行为放在哪里呢?
我们可以ValidateValueCallback
在注册依赖属性时提供一个委托。这调用了我们出处的静态方法,该方法采用单个参数对象值,足以进行上下文独立检查,例如“秒必须在 0-59 范围内”。
有时您需要依赖于实例的上下文信息,例如,Day 的有效范围取决于 Month 的实例值。
在这种情况下我们应该怎么做?在 propdp 设置器中处理这将是微不足道的。
下面有人提出,PropertyChanged 事件可能用于这种验证,这实际上是我在提示这个问题的情况下所做的。然而,这很难看,因为在这个阶段更改已经提交给模型,因此有必要维护一个撤消堆栈以提供对先前值的访问。
MSDN 中似乎确实有一些关于这个主题的材料,但我没有时间考虑它需要的内容。