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

效果都是一样的。

Binding(四):数据校验的更多相关文章
- 数据绑定(九)Binding的数据校验
		
原文:数据绑定(九)Binding的数据校验 Binding用ValidationRules属性来校验数据的有效性,ValidationRules属性类型是Collection<Validati ...
 - Struts2基础学习(四)—类型转换器和数据校验
		
一.自定义类型转换器 1.概述 Struts2提供了常规类型转换器,可以用于常用数据类型的转换,但如果目标类型是一个特殊类型,则需要自定义转换器.Struts2 类型转换器实际上都是基于OG ...
 - springmvc(四) springmvc的数据校验的实现
		
so easy~ --WH 一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端 ...
 - WPF 之 Binding 对数据的校验与转换(三)
		
一.前言  Binding 的作用就是架在 Source 和 Target 之间的桥梁,数据可以在这座桥梁的帮助下来流通.就像现实中的桥梁会设置一些关卡进行安检一样,Binding 这座桥上也可以设 ...
 - 移动商城第四篇【Controller配置、添加品牌之文件上传和数据校验】
		
Controller层配置 编写SpringMVC的配置文件 springmvc.xml <?xml version="1.0" encoding="UTF-8&q ...
 - [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
		
前言: 只要是有表单存在,那么就有可能有对数据的校验需求.如:判断是否为整数.判断电子邮件格式等等. WPF采用一种全新的方式 - Binding,来实现前台显示与后台数据进行交互,当然数据校验方式也 ...
 - Golang使用validator进行数据校验及自定义翻译器
		
Golang使用validator进行数据校验及自定义翻译器 包下载:go get github.com/go-playground/validator/v10 一.概述 在接口开发经常会遇到一个问题 ...
 - SpringMvc中的数据校验
		
SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...
 - springmvc的数据校验
		
springmvc的数据校验 在Web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对数据进行验证,输入验证分为客户端验证与服务器端验证. 客户端验证主要通过javaScript脚本 ...
 
随机推荐
- [bug] ERROR: Can't get master address from ZooKeeper; znode data == null
			
排错 访问bigdata111:50070没显示 jps发现hdfs的namenode没启动 查看namenode日志发现9000端口被占用 查找占用端口的进程 杀死进程,或在配置文件中更改端口号 参 ...
 - [bug] java.sql.SQLSyntaxErrorException: Table 'mysql.tb_item' doesn't exist
			
参考 https://zhidao.baidu.com/question/146817103.html
 - netperf对比
			
netperf -H 10.1.60.141 -t TCP_STREAM -l 60 -p 10082 netperf -H 10.1.60.141 -t UDP_STREAM -l 60 -p ...
 - jmeter 非GUI模式下传参
			
为什么要使用非GUI模式?--因为GUI模式下运行的时候消耗的内存比非GUI模式大,会使得压力测试的结果不准确. 根据参数类型分为两种:jmeter.properties和system.propert ...
 - CSS 重置技术
			
元素默认样式显示问题 每个浏览器对不同元素都有自己的默认样式.Google Chrome 渲染正文标题.段落.列表等,与 IE 浏览器可能都有所不同.这就导致同一个页面元素在不同的浏览器中显示效果不一 ...
 - linux 磁盘管理命令之df-(转自 Howie的专栏)
			
linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...
 - python工业互联网应用实战16-前后端分离模式之修改与删除
			
前一章节介绍了List页面的JQuery技术栈的迁移,这一章节我们花一些篇幅来说说修改/查看页面的技术栈迁移.相对于List的获取数据,修改页面涉及到数据Post提交到后台更新数据库.我们仍旧小步迭代 ...
 - Django(46)drf序列化类的使用(ModelSerializer)
			
前言 我们上篇文章使用到了Serializer类,可能有小伙伴说太过复杂,那么本篇就为大家带来更加简便的序列化类ModelSerializer ModelSerializer 先来看下ModelSer ...
 - AIFramework框架Jittor特性(下)
			
AIFramework框架Jittor特性(下)
 - Megengine量化
			
Megengine量化 量化指的是将浮点数模型(一般是32位浮点数)的权重或激活值用位数更少的数值类型(比如8位整数.16位浮点数)来近似表示的过程. 量化后的模型会占用更小的存储空间,还能够利用许多 ...