【发布时间】:2012-12-25 13:53:06
【问题描述】:
建议我们不要向依赖属性包装器的访问器方法添加行为,因为它们可以通过直接调用 Get/SetValue 来绕过。
好的,这是合理的。那么我们把这种行为放在哪里?
我们可以在注册依赖属性时提供ValidateValueCallback 委托。这调用了我们来源的静态方法,该方法采用单个参数对象值,足以进行上下文无关的检查,例如“秒必须在 0-59 范围内”。
有时您需要依赖于实例的上下文信息,例如,Day 的有效范围取决于 Month 的实例值。
在这种情况下我们应该怎么做?这在 propdp 设置器中处理起来很简单。
下面已经提出,PropertyChanged 事件可能用于这种验证,这实际上是我在提示这个问题的情况下所做的。然而,这很丑陋,因为在这个阶段更改已经提交给模型,因此有必要维护一个撤消堆栈以提供对先前值的访问。
MSDN 中似乎确实有一些关于这个主题的材料,但我没有时间考虑它所需要的内容。
【问题讨论】:
-
在注册属性以处理所有逻辑时,您不能只在属性元数据中使用
PropertyChanged事件,因为它会传入所有者和更改的值(旧值、新值) -
也许,但是发生在 值被提交给模型之后,所以为了让它工作,我必须全力以赴并实现命令和撤消堆栈。
标签: wpf silverlight dependency-properties