【发布时间】:2010-09-12 11:18:53
【问题描述】:
如果给定值无效,是否应该从CoerceValueCallback 引发异常,或者应该只使用ValidateValueCallback 进行DP 值验证?
【问题讨论】:
标签: wpf binding dependency-properties
如果给定值无效,是否应该从CoerceValueCallback 引发异常,或者应该只使用ValidateValueCallback 进行DP 值验证?
【问题讨论】:
标签: wpf binding dependency-properties
CoerceValue 确实应该用于固定一个值(例如,将其限制在 min 和 max 之间)。我不知道抛出异常是否会使应用程序崩溃(您只需要对其进行测试以找出答案)还是框架会处理它,但无论如何我都不推荐它,因为它会违反良好的编码习惯。
为了获得 ValidateValue 的额外信息,有时您必须在类中定义一些额外的字段。您可以绑定这些字段或在为您的 DP 设置值之前设置它们,然后在您的 ValidateValue 中您可以访问这些字段并获取所需的额外信息。这个额外的字段通过中间“层”创建和传递信息,微软似乎没问题,因为这就是他们(短视)设计框架的方式。
我会给你一个关于新的 WPF 数据网格的例子。如果您采用标准路线并定义 RowValidationRule,您将希望有权访问 ItemsSource(您的表),以确定您的行中的给定值是否已存在于表中。这是一件非常标准的事情,但验证回调中未提供该信息。因此,您必须在验证类中创建一个字段,您可以将 DataGrid 的 ItemsSource 绑定到该字段,然后您可以在验证期间访问该字段...
【讨论】:
首先:我花了一些心思才弄清楚 DP 是指依赖属性。
second:据我了解,CoerceValueCallback 是将属性的值固定为给定值,而不是验证值。因此,我会选择 ValidateValueCallback 进行验证。反正不叫吗?
【讨论】: