Binding(四):数据校验

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

    跟类型转换器一样,数据校验需要我们继承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 类型, 验证出错后可以返回一些错误描述性数据。

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

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

    文本框自动变红。

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

    一般的,系统默认从源,也就是后台属性中来的数据都是合法的,也就是不自动校验从源来的数据,如下图:

    如果需要校验来自源的数据,需要做点改动,如下图:

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

 

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

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

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

    既然可以通过Validation类获取错误信息,我们也可以将两个方法融合为一个,代码如下:

    效果都是一样的。   

 

 

posted @ 2021-07-06 12:16  宿春磊Charles  阅读(595)  评论(0编辑  收藏  举报