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

        效果都是一样的。   

  • 相关阅读:
    suse系统FTP问题
    Oracle SQL编写注意事项
    EXP-00056: ORACLE error 6550 encountered报错;
    Linux 单网卡多 IP 的配置方法
    Authorized users only. All activity may be monitored and reported.
    使用jconsole检测linux服务器
    Suse系统用户不能登录报错
    性能测试介绍
    判断浏览器是否是手机端
    JSONP 跨域请求
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/14976356.html
Copyright © 2011-2022 走看看