是否适合从CoerceValueCallback抛出异常

时间:2010-09-12 11:18:53

标签: wpf binding dependency-properties

如果给定值无效或仅CoerceValueCallback用于DP值验证,是否适合从ValidateValueCallback抛出异常?

2 个答案:

答案 0 :(得分:1)

确实应该使用CoerceValue来修复一个值(例如,在min和max之间限制它)。我不知道抛出一个异常是否会使应用程序崩溃(你只需要测试它来查找)或者框架是否会处理它,但我不会推荐它,因为它会违反良好的编码习惯。

为了获得ValidateValue的额外信息,您有时需要在类中定义一些额外的字段。您可以在为DP设置值之前绑定这些字段或设置它们,然后在ValidateValue中,您可以访问这些字段并获取所需的额外信息。这个额外的字段通过中间“层”创建和传递信息,微软似乎没问题,因为这就是他们(短视)设计框架的方式。

我将举例说明新的WPF数据网格。如果您使用标准路径并定义RowValidationRule,您可以访问ItemsSource(您的表)以确定您的行中的给定值是否已存在于表中。这是一个非常标准的事情,但验证回调中没有提供该信息。因此,您必须在验证类中创建一个可以绑定DataGrid的ItemsSource的字段,然后您可以在验证期间访问该字段...

答案 1 :(得分:0)

首先:我想到了DP意味着依赖属性。

第二:据我所知,CoerceValueCallback是关于将属性的值固定为给定值,而不是验证值。因此,我选择验证ValidateValueCallback。反正不是这样吗?