登录/注册
小张
1699
占位
2
占位
0
浏览量
占位
粉丝
占位
关注
Binding(四):数据校验
小张
2021-08-22 09:00:08 2021-08-22
95
0

​    除了上一节讲的类型转换器,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类获取错误信息,我们也可以将两个方法融合为一个,代码如下:

    效果都是一样的。   

 

 

原文: https://www.cnblogs.com/charlesmvp/p/14976356.html

暂无评论