1、WPF包含的验证方式
方式 |
父类 | 对应接口 |
处理方式 |
简便写法 |
默认值 |
ValidationRule |
无 |
检查在更新数据源(Source)时抛出的异常 |
ValidatesOnExceptions=True |
false |
|
ValidationRule |
IDataErrorInfo |
检查实现了IDataError接口的对象生成的错误 |
ValidatesOnDataErrors=True |
false |
|
ValidationRule |
INotifyDataErrorInfo |
检查实现了INotifyDataErrorInfo接口的对象生成的错误 |
ValidatesOnNotifyDataErrors=True |
true |
说明:
1、如果一个Binding的ValidationRules设置了ExceptionValidationRule或在Binding中直接指定ValidateOnException=true,那么它捕获属性中抛出的异常,参照下面的详细示例
2、对应的如果一个Binding的ValidationRules设置了DataErrorValidationRule或NotifyDataErrorValidationRule,或直接在Binding中指定ValidateOnDataError或ValidateOnNotifyDataErrors,那么它捕获实现对应接口的错误
2、ValidationStep属性,默认是:RawProposedValue,对于DataErrorValidationRule来说,默认是UpdatedValue
<ExceptionValidationRule ValidationStep="RawProposedValue" />
//
// Summary:
// 确定何时执行ValidationRule
public enum ValidationStep
{
//
// Summary:
// 在数据没有转换之前(应用Converter)之前执行ValidationRule
RawProposedValue = 0,
//
// Summary:
// 在数据转换发生之后,赋值给source之前执行ValidationRule
ConvertedProposedValue = 1,
//
// Summary:
// 在source的值更新之后执行ValidationRule
UpdatedValue = 2,
//
// Summary:
// 在数据提交之后执行ValidationRule
CommittedValue = 3
}
3、在UI上显示错误信息
-
指定Validation.ErrorTemplate(AdornedElementPlaceholder是输入控件,如TextBox的占位符)
<ControlTemplate x:Key="validationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
- 使用Style指定错误样式
<Style x:Key="textStyleTextBox" TargetType="TextBox">
<Setter Property="Foreground" Value="#333333" />
<Setter Property="MaxLength" Value="40" />
<Setter Property="Width" Value="392" />
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
4、Validation处理过程
数据验证发生在TwoWay和OneWayToSource的Binding中
验证流程(