WPF使用IDataErrorInfo进行数据校验

WPF使用IDataErrorInfo进行数据校验
原文:WPF使用IDataErrorInfo进行数据校验

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

class Customer
{public string FirstName{get;set;}public int Age{get;set;}
}

将Customer类继承IDataErrorInfo,并实现它的属性。

    class Customer : System.ComponentModel.IDataErrorInfo{public string this[string columnName]{get{string result = string.Empty;if(columnName == "FirstName"){if(string.IsNullOrWhiteSpace(FirstName)){result = "Name cannot null or empty.";}}else if(columnName == "Age"){if(Age < 0){result = "Age cannot less then zero.";}}return result;}}public string Error{get{return null;}}public string FirstName{get;set;}public int Age{get;set;}}

在UI中绑定Customer的FirstName,Age属性,并且当出现错误数据时触发验证。

    <Window.Resources><local:Customer x:Key="CustomerInstance"  FirstName="Sam Bent" Age="24" /><ControlTemplate x:Key="TextBoxErrorTemplate"><Grid><Border BorderBrush="Blue" BorderThickness="1"><AdornedElementPlaceholder/></Border></Grid></ControlTemplate></Window.Resources><StackPanel Margin="10"><TextBox Text="{Binding Source={StaticResource CustomerInstance}, Path=FirstName, UpdateSourceTrigger=PropertyChanged, 
            ValidatesOnDataErrors=True}" ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"Validation.ErrorTemplate="{x:Null}"Margin="0,5" /><TextBox Text="{Binding Source={StaticResource CustomerInstance}, Path=Age, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
            Validation.ErrorTemplate="{StaticResource TextBoxErrorTemplate}">
            <TextBox.Style><Style TargetType="{x:Type TextBox}"><Style.Triggers><Trigger Property="Validation.HasError" Value="True"><Setter Property="Background" Value="Red" /><Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" /></Trigger></Style.Triggers></Style></TextBox.Style></TextBox></StackPanel>

将Customer的FirstName与Age属性分别绑定在两个TextBox中,设置ValidatesOnDataErrors=True来触发验证。将错误信息绑定在TextBox的ToolTip属性上,

ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" 或者

ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}"或者

<Style TargetType="{x:Type TextBox}"><Style.Triggers><Trigger Property="Validation.HasError" Value="True"><Setter Property="Background" Value="Red" /><Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" /></Trigger></Style.Triggers>
</Style>

另外可以对ErrorTemplate进行定制,例如上面代码中的TextBoxErrorTemplate。

运行结果:

代码点击这里下载,感谢您的阅读。

posted on 2018-11-12 14:31 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/9946289.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web 界面设计 Axure元件样式

找不到原创了&#xff0c;若侵权&#xff0c;请联系博主删除&#xff01;谢谢

cf 786 B 线段树优化建图

cf 786 B 链接 CF 思路 n个点&#xff0c;3种建边方式&#xff0c;规模\(O(n^2)\) 线段树优化建图 注意 读入的数据好坑啊&#xff0c;说好的v,u变成了u,v。 两棵树&#xff0c;一棵出&#xff0c;一棵入。线段树的作用只不过是按照那个形状建边而已&#xff0c;并没啥用。 初始…

iPhone6和iPhone6 plus的iOS8设计尺寸参考指南

找不到原创了&#xff0c;若侵权&#xff0c;请联系博主删除&#xff01;谢谢

欧几里得

转载于:https://www.cnblogs.com/morui/p/10799359.html

pl/sql下DBMS_OUTPUT.PUT_LINE的输出位置

项目里存储过程中用到DBMS_OUTPUT.PUT_LINE进行输出日志&#xff0c;一开始不知道在哪里看&#xff0c;网上很多都是直接运行后的位置。但是储过程中的日志找了好一会&#xff0c;记录一下。 1、运行时输出位置。 declarein_interval_start_id varchar2(40);in_interval_end_id…

javaweb学习总结(四十五)——监听器(Listener)学习二

一、监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和Ser…

Excel_DATEDIF函数计算工龄、计算年假

基本语法 DATEDIF(开始日期&#xff0c;结束日期&#xff0c;unit) 基本用法&#xff1a; 实战&#xff1a; 1、计算工龄&#xff1a; 2、计算年假 转载于:https://www.cnblogs.com/wodexk/p/10799890.html

Cordova - 彻底搞定IOS编译!

操作系统&#xff1a;OSX10.14 XCode&#xff1a;10.1 Cordova&#xff1a;8.1.2 假设已经配置好了Cordova开发环境&#xff0c;Apple ID你也有&#xff0c;XCode也可以正常工作了&#xff0c;那么就可以继续看这篇文章了&#xff01; 如果你没有看我这篇文章&#xff0c;那么你…

javaweb学习总结(四十四)——监听器(Listener)学习

一、监听器介绍 1.1、监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象&#xff0c;当被监视的对象发生情况时&#xff0c;立即采取相应的行动。监听器其 实就是一个实现特定接口的普通java程序&#xff0c;这个程序专门用于监听…

vue无缝滚动的插件开发填坑分享

写插件的初衷 1.项目经常需要无缝滚动效果&#xff0c;当时写jq的时候用用msClass这个老插件&#xff0c;相对不上很好用。2.后来转向vue在vue-awesome没有找到好的无缝滚动插件&#xff0c;除了配置swiper可以实现但是相对来说太重了&#xff0c;于是自己造了个轮子。 3.在这分…

PHP常用的自定义函数

PHP常用的自定义函数 目录 php常用自定义函数类下载php 设置字符编码为utf-8路径格式化(替换双斜线为单斜线)转码打印输出api返回信息字符串截取 方法一:方法二:数组 字符串 对象 json格式的字符串互转强制类型转换php序列化serialize与返回序列化unserialeze创建日志文件获取i…

春第十周作业

作业&#xff1a; 这个作业属于那个课程C语言程序设计II这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3162我在这个课程的目标是阅读并学习这个作业在那个具体方面帮助我实现目标知道了我们以后工作所需的是雇主所需的参…

第六次作业(C语言)

心得体会 该题主要涉及知识点有&#xff1a;1、函数的定义&#xff1b;2、函数的调用&#xff08;即prime函数的调用&#xff09;&#xff1b;3、素数的判断&#xff1b;4、大小排序。 看到题时我首先想到了嵌套循环&#xff0c;可是仔细一看题目要求的是用prime函数的调用&…

ProtocolHandler继承体系

转载于:https://www.cnblogs.com/GooPolaris/p/10815072.html

高频ES6

var promise new Promise((resolve, reject)> {if (操作成功) {resolve (value)}else{reject(error)} }) promise.than(function (value) {/*成功*/}, function(value) {/*失败*/}) Promise是异步编程的一种解决方案, 比传统的解决方案--回调函数和事件更加强大.由社区最早…

NodeJS+Express+MongoDB - 张果 - 博客园

目录 一、MongoDB 1.1、安装MongoDB 1.1.1、配置运行环境1.1.2、运行MongoDB1.2、数据库操作 1.2.1、创建数据库与查看数据库1.2.2、删除数据库1.2.3、插入数据1.2.4、查询数据1.2.5、修改1.2.6、删除二、NodeJS访问MongoDB 2.1、安装MongoDB访问驱动2.2、添加数据2.3、修改数…

一个好用的浏览器暗色浏览插件 Dark Reader

转载于:https://www.cnblogs.com/tyong/p/9973363.html

实验 4 [bx]和 loop 的使用

实验结论 实验1&#xff1a;综合使用 loop,[bx]&#xff0c;编写完整汇编程序&#xff0c;实现向内存 b800:07b8 开始的连续 16 个字单元重复填充字数据 0403H。 1.源代码及实验结果 运行结果&#xff1a;屏幕中央出现一排红色的心❤。 2.将源代码程序中字数据 0403H→修改为 0…

linux开发工具之gcc

首先gcc编译链接的一个实例如下所示&#xff1a; 接下来看一下gcc的常见选项&#xff1a; gcc的使用示例&#xff1a; 转载于:https://www.cnblogs.com/wsw-seu/p/10826124.html

音频基本概念

音频基本概念 声音的本质 音调&#xff1a;频率 音量&#xff1a;振幅 音色&#xff1a;与材质有关&#xff0c;谐波&#xff08;不规则的正玄波&#xff09; 屏幕快照 2018-12-04 下午1.53.40.png采样-量化-编码 采样大小&#xff1a; 一个采样用多少bit存放&#xff0c;目前常…