是否适合从CoerceValueCallback抛出异常

HCL*_*HCL 9 wpf binding dependency-properties

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

Mar*_*rko 1

CoerceValue 确实应该用于固定一个值(例如将其限制在最小值和最大值之间)。我不知道抛出异常是否会导致应用程序崩溃(您只需测试它即可找出答案)或者框架是否会处理它,但无论如何我不会推荐它,因为这违背了良好的编码实践。

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

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