Binding(四):数据校验

2021年09月15日 阅读数:1
这篇文章主要向大家介绍Binding(四):数据校验,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

​    除了上一节讲的类型转换器,Binding还自带数据校验功能,这节主要来说一下。ide

    跟类型转换器同样,数据校验须要咱们继承ValidationRule类,实现其中的Validate方法,并写入咱们自定义的逻辑来完成校验规则的制定,下面以文本框只能录入数字的校验规则来演示一下它的使用,请先看数据校验的处理逻辑:布局

class NumberValidationRule : ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        if(int.TryParse(value.ToString(), out int defaultVal))
        {
            return new ValidationResult(true, null);
        }
        else
        {
           //第二个参数是错误描述信息
            return new ValidationResult(false, "Invalid Number");
        }
    }
}

    总体的代码很简单,它的返回值是统一的ValidationResult 类型, 验证出错后能够返回一些错误描述性数据。spa

    而后在后台将数据验证的Binding设置到文本框(文本框名为txBox)中:3d

    当数据为正常的数字时,校验经过,文本框无变化,当输入非数字时,效果以下:code

    文本框自动变红。对象

    另外要了解一点,Binding的ValidationRules是个集合,也就是能够设置多个数据校验。blog

    通常的,系统默认从源,也就是后台属性中来的数据都是合法的,也就是不自动校验从源来的数据,以下图:继承

    若是须要校验来自源的数据,须要作点改动,以下图:事件

    将校验对象的ValidatesOnTargetUpdated属性设置为true。get

 

    另外,咱们看到,界面上并无显示错误信息,这一点须要咱们作一些特殊处理,我修改了一下布局:

    在文本框下添加了一个用于显示错误信息的TextBlock,并添加了两个事件,一个是验证错误时触发的Validation.Error事件,用于显示错误信息,一个是TextChanged事件,用于校验正确后清除错误信息,后台代码以下:

    从事件参数中咱们就能拿到错误对象,经过该对象的ErrorContent属性就能拿到错误信息。同时,咱们也能够经过Validation类来获取错误数据,GetErrors方法能够获取到错误数量,当没有错误时,应该清掉错误信息,效果以下:

    既然能够经过Validation类获取错误信息,咱们也能够将两个方法融合为一个,代码以下:

    效果都是同样的。