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脚本 ...
随机推荐
- Python运算符 - Python零基础入门教程
目录 一.算术运算符 二.赋值运算符 三.比较运算符 四.运算符的优先等级 五.重点总结 六.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python ...
- [BD] Sqoop
什么是Sqoop 数据交换工具(ETL):RDBMS(MySQL.Oracle等)<-->Sqoop<-->HDFS(HBase.Hive等) 基于JDBC 执行数据交换时,本 ...
- [刷题] 70 Climbing Stairs
要求 楼梯共有n个台阶,每次上一个台阶或两个台阶,一共有多少种上楼梯的方法? 示例 输入:n=3 [1,1,1],[1,2,],[2,1] 输出:n=3 实现 自顶向下(递归) 递归 1 class ...
- 【转载】复制文件到已存在的Jar
复制文件到已存在的Jar 技术标签: Ant OSGI Eclipse 脚本 配置管理 问题 这两天在写一个小东西.这个小东西是一个大东西的一部分.其实也就是其中的一两个类.而这个大东西需 ...
- TCP/IP协议三次握手_四次挥手
TCP/IP协议 TCP是一种面向连接的端到端的可靠传输协议. TCP报头格式 三次握手的过程 一.客户端发送一个连接请求,发送一个随机数X,这时客户端的端口状态变为SYN_SENT状态. 二.服务端 ...
- Linux进阶之使用Oh-My-Zsh打造炫酷终端
Oh My Zsh是基于zsh命令行的一个扩展工具集,提供了丰富的扩展功能.除了功能增强之外,还提供非常丰富的主题.使用Oh-My-Zsh打造酷炫Shell终端的步骤(Deepin系统): 原始终端: ...
- 重新整理 .net core 实践篇————配置系统之盟约[五]
前言 在asp .net core 中我们会看到一个appsettings.json 文件,它就是我们在服务中的各种配置,是至关重要的一部门. 不管是官方自带的服务,还是我们自己编写的服务都是用它来实 ...
- libevent中数据缓冲区buffer分析
很多时候为了应对数据IO的"慢"或者其他原因都需要使用数据缓冲区.对于数据缓冲,我们不陌生,但是对于如何实现这个缓冲区,相信很多时候大家都没有考虑过.今天就通过分析libevent ...
- go语言json技巧
go语言json技巧 本文总结了在项目中遇到的那些关于go语言JSON数据与结构体之间相互转换的问题及解决办法. 基本的序列化 首先我们来看一下Go语言中json.Marshal()(系列化)与jso ...
- LogMysqlApeT
with LogMysqlApeT(db) as m_client: condition = "select * from {} where deleted=0 ".format( ...