原文:数据绑定(九)Binding的数据校验

Binding用ValidationRules属性来校验数据的有效性,ValidationRules属性类型是Collection<ValidationRule>,他可以设置多个数据校验条件,ValidationRule是抽象类,使用的时候需要创建它的派生类并实现它的Validate方法,Validate方法的返回值是ValidationResult类型对象,如果校验通过,就把ValidationResult对象的IsValid属性设为true,反之,设为false,并为其ErrorContent属性设置一个合法的消息内容

界面代码

        <TextBox x:Name="textBox1" Margin="5"></TextBox><Slider x:Name="slider1" Minimum="0" Maximum="100" Margin="5" />

TextBox用于设置滚动条的值,需要对TextBox中的值进行校验,首先需要准备一个校验类

    class RangeValidationRule : ValidationRule{public override ValidationResult Validate(object value, CultureInfo cultureInfo){double d = 0;if (double.TryParse(value.ToString(), out d)){if ((0 <= d) && (d <= 100)){return new ValidationResult(true, null);}}return new ValidationResult(false, "输入值非法");}}

然后在后台代码中建立这样的Binding

            Binding binding = new Binding();binding.Source = slider1;binding.Path = new PropertyPath("Value");binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;RangeValidationRule rvr = new RangeValidationRule();binding.ValidationRules.Add(rvr);textBox1.SetBinding(TextBox.TextProperty, binding);

Binding进行校验时的默认行为是认为来自Source的数据始终是正确的,只有来自Target的数据才有可能有问题,为了不让有问题的数据污染Source所以需要校验,所以,Binding只有在Target被外部方法更新时校验数据,而来自Binding的Source数据更新Target时是不会进行校验的。如果想在Target改变Source数据时也进行校验,就需要将验证条件的ValidatesOnTargetUpdated属性设置为true。

修改前台代码为

    <StackPanel><TextBox x:Name="textBox1" Margin="5"></TextBox><Slider x:Name="slider1" Minimum="-10" Maximum="10" Margin="5" /></StackPanel>

绑定增加一行代码

            Binding binding = new Binding();binding.Source = slider1;binding.Path = new PropertyPath("Value");binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;RangeValidationRule rvr = new RangeValidationRule();rvr.ValidatesOnTargetUpdated = true;binding.ValidationRules.Add(rvr);textBox1.SetBinding(TextBox.TextProperty, binding);

当滑块拖动到负值时,TextBox显示校验失败

校验失败时,ValidationResult对象携带了一条错误消息,想要显示这条消息,首先在创建Binding时要把Binding对象的NotifyOnValidationError属性设置为true

数据绑定(九)Binding的数据校验相关推荐

  1. SpringMVC-应用(数据绑定-自定义类型转换器,数据的格式化,数据校验)

    一.提出问题 SpringMVC封装自定义类型对象的时候,JavaBean要和页面提交的数据一一绑定.下面要知道: 1)页面提交的数据都是字符串 2)JavaBean中的属性如:Integer age ...

  2. java学习笔记——springmvc 之 数据自定义转换器 数据格式化 JSR303数据校验返回与接收JSON(@RequestBody 和 @ResponseBody)

    九.数据绑定流程分析 1.提出问题 日期字符串格式的表单参数,提交后转换为Date类型 <!--    解决问题: 1.数据类型转换 2.数据格式 3.数据校验 --> BirthDay ...

  3. c语言实现java接口_五分钟带你了解Java是如何从容而优雅地实现接口数据校验

    本篇文章给大家分享平时开发中总结的一点小技巧!在工作中写过Java程序的朋友都知道,目前使用Java开发服务最主流的方式就是通过Spring MVC定义一个Controller层接口,并将接口请求或返 ...

  4. WPF使用IDataErrorInfo进行数据校验

    这篇博客将介绍如何使用IDataErrorInfo进行数据校验.下面直接看例子.一个Customer类,两个属性(FirstName, Age) class Customer {public stri ...

  5. (转)Silverlight数据校验之INotifyDataErrorInfo

    原文地址:http://www.cnblogs.com/PerfectSoft/archive/2012/03/01/2375007.html 在Silverlight中,数据实体类的有效性校验有多种 ...

  6. SilverlightMVVM模式中的数据校验

    silverlight的数据校验大体分成3种类型: 数据是非必填的但是需要满足相应数据格式的 数据是必填的且可能需要进行数据格式校验的 其他(如数据的联动校验) 以下的数据校验方式针对第二种: 在相应 ...

  7. SpringMVC的数据转换、格式化和数据校验

    目录 一.数据转换 1.ConversionService 2.自定义类型转换器 (1)案例一 (2)案例二 二.处理静态资源 三.关于 mvc:annotation-driven 四.@InitBi ...

  8. 如何优雅的处理异常?SpringBoot全局异常与数据校验

    要思考的问题 在现在的前后端交互中,通常都规范了接口返回方式,如返回的接口状态(成功|失败)以及要返回的数据在那个字段取,或者说失败了以后提示信息从接口哪里返回,因此,如果想做全局异常,并且异常发生后 ...

  9. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation

    [WPF 基础知识系列] -- 绑定中的数据校验Vaildation 原文:[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 前言: 只要是有表单存在,那么就有可能有对数据的校验需 ...

最新文章

  1. python简单代码演示效果-演示python如何创建和使用一个简单的元类的代码
  2. 【资讯】K8S生态再添一员,Rancher发布开源HCI软件Harvester、及其安装教程
  3. mysql通常使用语句_Mysql 常用SQL语句集锦
  4. 图灵奖得主Jeff Ullman:机器学习不是数据科学的全部!统计学也不是!
  5. 开源管理项目管理_避免开源项目管理中的不良做法
  6. VMware-workstation安装
  7. Spring Security OAuth2.0_实现分布式认证授权_扩展用户信息_Spring Security OAuth2.0认证授权---springcloud工作笔记156
  8. fstream的用法-----------------2012.12.26
  9. android 图库 imgcache.idx,iOS开发 - 关于列表图片渲染内存暴增问题
  10. 软件可靠性的一些关注点
  11. window 下tomcat 内存设置,bat启动方式的
  12. vmlinuz 文件解压缩(zImage|bzImage)
  13. fig r函数_R语言图形函数par()参数应用举例.pdf
  14. 【密码术】openssl椭圆曲线密钥对生成
  15. Python四大神兽(迭代器生成器闭包装饰器)
  16. cocos渲染引擎分析(五)-----FBO实现多分辨率渲染
  17. 程序员找媳妇的要求是什么呢?
  18. 传感器实验——LCD屏幕测试
  19. 招募爱心家庭为藏区孤儿圆梦
  20. 剑指offer题目及答案

热门文章

  1. 已解决:nginx修改上传文件大小限制
  2. js怎么给div加滑动条 vue给弹出层加滑动条(一分钟学会用js加滚动条)
  3. Android移动应用基础教程【服务】
  4. 计算机及应用学习顺序,自考计算机及应用专业经验谈
  5. linux中如何解决文件已删除但空间不释放的案例
  6. springboot 配置文件-yaml的用法
  7. iis7 下php 环境配置文件,IIS7.X配置PHP运行环境小结_php
  8. java安全框架下载文件_java安全框架之Permission学习笔记
  9. c语言输出字母随机数,你好,怎样用c语言输出一个1到100的随机数
  10. 一个项目中能提出哪些数据库优化_阿里资深技术专家曲山:优秀的数据库存储引擎应具备哪些能力?...