• 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类获取错误信息,我们也可以将两个方法融合为一个,代码如下:

        效果都是一样的。   

  • 相关阅读:
    初识Mysql 连接器的收获(包含JDBC API最新文档)以及一些c++的有用技巧
    重拾 ”多项式“ 给我的启示
    vs2015下配置MySQL,使之能使用c++连接完美运行
    在CentOS上使用yum安装java
    CentOS 用yum安装中文输入法
    Redhat Linux RHEL5配置CentOS YUM更新源
    转:Linux下which、whereis、locate、find 命令的区别
    Centos 挂载NTFS格式的USB硬盘
    scp采用无密码在两台linux服务器之间传输数据
    转:Andriod studio技巧合集
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/14976356.html
Copyright © 2020-2023  润新知