Welcome

首页 / 软件开发 / .NET编程技术 / WPF学习之绑定—Validation Rule和Binding Group

WPF学习之绑定—Validation Rule和Binding Group2010-07-18 cnblogs zlgcool Allan在上一篇文章中我们讨论了有关WPF绑定的知识点,现在我们可以很容易的将业务数据作为源绑定到WPF控件并可以通过创建不同的Data Template后来以特定的样式展现。而作为这个最常用的功能我们可以通过Two Way的绑定模式与界面交互,而在这个时候我们就需要类似于ASP.NET中Validator一样的东西来限制或者说校验数据有效性。ValidationRule就是为这样的应用而生的。本文将详细讨论如何应用验证规则和自定义错误模板。

我们首先来看看WPF中有关数据验证规则相关的几个常用类:

· ValidationRule : 所有自定义验证规则的基类。提供了让用户定义验证规则的入口。

· ExceptionValidation :表示一个规则,该规则检查在绑定源属性更新过程中引发的异常。它是一个内置的规则,它检查在绑定源属性更新过程中引发的异常。

· ValidationResult : 数据验证结果的表现方式。ValidationRule对象的Validate方法执行完毕后通过ValidationResult来表示验证的结果。这里包含了错误信息—ErrorContent,数据是否有效—IsValid。ValidResult 为 ValidationResult 的有效实例。

· ValidationError :表示一个验证错误,该错误在 ValidationRule 报告验证错误时由绑定引擎创建。

对于WPF中绑定的验证和转换值我们需要注意:

1.在将值从目标属性传输到源属性时,数据绑定引擎首先移除可能已添加到所绑定元素的 Validation.Errors附加属性的任何 ValidationError。然后,数据绑定引擎检查是否为该 Binding 定义了自定义验证规则;如果定义了自定义验证规则,那么它将调用每个 ValidationRule 上的 Validate 方法,直到其中一个规则失败或者全部规则都通过为止。如果某个自定义规则未通过,则绑定引擎会创建一个 ValidationError 对象,并将该对象添加到绑定元素的 Validation.Errors 集合。如果 Validation.Errors 不为空,则元素的 Validation.HasError附加属性被设置为 true。此外,如果 Binding 的 NotifyOnValidationError 属性设置为 true,则绑定引擎将引发该元素上的 Validation.Error附加事件。

2.如果所有规则都通过,则绑定引擎会调用转换器(如果存在的话)。

3.如果转换器通过,则绑定引擎会调用源属性的 setter。

4.如果绑定具有与其关联的 ExceptionValidationRule,并且在步骤 3 或 4 中引发异常,则绑定引擎将检查是否存在 UpdateSourceExceptionFilter。使用 UpdateSourceExceptionFilter 回调可以提供用于处理异常的自定义处理程序。如果未对 Binding 指定 UpdateSourceExceptionFilter,则绑定引擎将对异常创建 ValidationError 并将其添加到绑定元素的 Validation.Errors 集合中。

任何方向(目标到源或源到目标)的有效值传输操作都将清除 Validation.Errors附加属性。