- 什么是数据验证?
WPF中的Binding能够使数据在数据源和目标之间流通,在数据流通时,能够对数据进行一些处理,处理方式是数据转换和数据验证; - 数据验证实例
所有的自定义验证规则都必须继承自ValidationRule抽象类,通过实现其Validate()方法的返回值ValidationResult表示验证结果。示例如下:
<TextBox Grid.Row="1">
<TextBox.Text>
<Binding Path="Number" UpdateSourceTrigger="PropertyChanged"
Converter="{StaticResource Converter}" NotifyOnValidationError="True">
<Binding.ValidationRules>
<validationRules:NumberValidationRule ValidatesOnTargetUpdated="True"
ValidationStep="CommittedValue"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
其中,ValidatesOnTargetUpdated属性表示验证的方向,为false时,只能验证从目标到源的方向,为true时,同时也会验证从源到目标的验证;
ValidationStep属性确定了验证的时机,是一个枚举值:
- RawProposedValue(0),默认值,即先验证,后转换,再赋值给源,如果验证失败,不会继续执行转换和赋值
- ConvertedProposedValue(1),先执行Converter,再执行Validate,后赋值到源,如果验证失败,则不执行赋值
- UpdatedValue(2),先执行Converter,再执行赋值,最后执行Validate,即无论Validate是否成功,源数据都会更新
- CommittedValue(3),先执行Converter,再执行赋值,最后执行Validate,即无论Validate是否成功,源数据都会更新
注意,在3、4中,自定义验证方法中的Value是System.Windows.Data.BindingExpression,而不再是目标值,这时应该先从Binding表达式中找到目标值再进行Validate。