Silverlight 数据验证

合集下载

Silverlight使用MVVM模式(5):异步Validation数据验证和INotifyDataErrorInfo接口

Silverlight使用MVVM模式(5):异步Validation数据验证和INotifyDataErrorInfo接口

数据验证(Validation)是界面程序的常见需求,例如使用正则表达式验证用户输入的Email地址是否合法,然后在界面给出错误提示信息。

在Sivlerlight的MVVM模式中,我们在Model和ViewModel可以做Validation,然后需要把Model和ViewModel的Validation 结果和错误信息通知视图(View)。

在WPF中,我们使用IDataErrorInfo,在Silverlight4中,建议使用INotifyDataErrorInfo。

IDataErrorInfo先简单说一下IDataErrorInfo,这个接口实现了简单的数据验证和错误报告功能,只能说聊胜于无吧。

例子:1<TextBox Text="{Binding Path=, Mode=TwoWay, ValidatesOnDataErrors=True, NotifyOnValidationError=True }"/>INotifyDataErrorInfo这个接口只有Silverlight4以上支持,非常强大,支持一个绑定属性多重错误、异步数据验证、自动通知视图错误信息、ErrorChanged事件、HasErrors属性、GetErrors方法等等。

定义:1publicinterface INotifyDataErrorInfo2 {3bool HasErrors { get; }45event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;67IEnumerable GetErrors(string propertyName);8 }实现这个INotifyDataErrorInfo接口也非常简单,来个简单的例子:1publicclass SimpleModel : INotifyDataErrorInfo2 {3publicevent EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;45private Dictionary<string, List<String>> _errors = new Dictionary<string, List<String>>();67privatestring _accountID = null;89publicstring AccountID10{11get { return _accountID; }12set13{14if (_accountID != value)15{16var propertyName = "AccountID";1718if (string.IsNullOrEmpty(value))19{20if (!_errors.ContainsKey(propertyName))21_errors.Add(propertyName, new List<string>());2223_errors[propertyName].Add("AccountID can't be null or empty"); 24}25else26{27if (_errors.ContainsKey(propertyName))28_errors.Remove(propertyName);29}3031NotifyErrorsChanged(propertyName);3233//Maybe you don't want to set this field to a value if the validation fails34_accountID = value;35}36}3738}3940public System.Collections.IEnumerable GetErrors(string propertyName)41{42if (_errors.ContainsKey(propertyName))43return _errors[propertyName];4445return _errors.Values;46}4748publicbool HasErrors49{50get { return _errors.Count >0; }51}525354privatevoid NotifyErrorsChanged(string propertyName)55{56if (ErrorsChanged != null)57ErrorsChanged(this, new DataErrorsChangedEventArgs(propertyName));58}59 }异步Validation数据验证和INotifyDataErrorInfo接口这个例子稍微复杂,实现了异步调用WCF RIA Service进行业务逻辑的validation并在ViewModel中把验证的错误提示通知视图,完整的代码下载,需要VS2010和Silverlight环境。

Silverlight探秘系列课程 Silverlight调试、错误处理和异常

Silverlight探秘系列课程 Silverlight调试、错误处理和异常

Silverlight 系列课程39讲 Silverlight 调试、错误处理和 调试 错误处理和 异常苏鹏 MVP MSDN 特约讲师下载Webcast好帮手iR iReaper文件大小<=2.5Mb 可按照多种分类方式进行批量下载WMV、MP3、MP4、Zune四种格式Webcast访问iReaper主页: /iReaper h d l i加速企业解决方案部署尽在资源和利益• 用于解决方案开发的集中资源 用于解决方案开发的集中资源:资源包括指向测试工具、开发 资源包括指向测试工具 开发 人员 SDK、技术论坛、联机培训等的链接,微软全球技术支持中 心( (GTSC) )的邮件技术支持。

• 对市场调查的访问权限:您可以使用这些宝贵信息来识别您当 前的客户或未来客户的特定需求。

• 认证徽标计划:该徽标可以向客户证明您所具有的优秀技术。

• 市场营销和销售支持 h OMetro – ISV领航计划最先应用微软最新技术 提升ISV 提升 ISV竞争优势和商业价值 竞争优势和商业价值• Metro 提供了结构化的支持来帮助ISV进行新技术的评估和 部署 部署: Discover  – 参与前沿技术培训 – 评估最新的微软技术及产品 Release Learn – 获取微软Beta版产品的技术支持 – 联络全球开发人员和架构师社区 – 与世界级的商务和技术社区分享最先 Develop 部署的经验点击添加MSN机器人小新 为您收听下载MSDN中文网络广播课程加油助力!收听本次课程需具备的条件• 了解 解SilverLight应用基础 应 础 • 了解.NET  NET 的错误处理基本原理Level 200内容介绍• • • • 调试概括 试 括 错误处理 处理和引发异常 总结Level 300调试概述• 讨论 Silverlight Tools for Visual Studio 2008 可帮 调试 Silverlight g 的应 的应用程 程 ,它可帮助您调试基于 序。

Silverlight常见基本问题.doc

Silverlight常见基本问题.doc

1.调试WCF相关问题的一般步骤是什么?2.如何使得Silverlight和HTML元素之间进行交互?2.1. 如何从JavaScript调用中可脚本化的方法?2.2. 如何从代码后置调用客户端JavaScript函数?2.3. 如何从代码后置访问HTML元素?3.如何在Visual Studio中调试带有Silverlight 功能的网站中的JavaScript代码?4.如何处理 Out-Of-Browser 相关问题?4.1. 如何检测应用程序是否工作在OOB( Out-Of-Browser)模式?4.2. 如何检测OOB更新?4.3. 如何将HTML元素融入Silverlight应用程序?4.4. OOB模式下如何调用JavaScript访问HTML 元素?4.5. 在Silverlight中如何访问cookie?5.如何调试OOB应用程序?6.在OOB模式下如何得到网络状况?7. 如何将XAML转换为图像?8. 如何使用Perspective 3D?9. 何时并如何使用Isolate Storage?10. 如何使同一页面的2个Silverlight应用程序交互?11. 如何指定安装界面?12. 什么是Element Binding?13. 什么是Binary Xml?14. Silverlight应用程序如何相互交互?15. Silverlight中如何访问本地字体?16. 什么是 Silverlight 导航应用程序(Navigation Application)?========================================== =====================1.调试WCF相关问题的一般步骤是什么?默认情况下,Silverlight使用浏览器HTTP栈。

这种情况下,如果WCF发生了一个错误,它会发送HTTP 404响应码,错误详细信息并不能在Silverlight客户端中被访问到。

FaceLight – Silverlight 4 实时人脸检测

FaceLight – Silverlight 4 实时人脸检测

FaceLight – Silverlight 4 实时人脸检测本文介绍如何实现一个简单的人脸识别系统在 c# 中使用 Silverlight 4 新网络摄像头功能。

介绍网络摄像头和麦克风 API 是我玩过 Silverlight 4 beta 发布在去年的 PDC 之后的第一件事。

我的意见,是它最酷的功能之一。

你可以做很多好玩的Silverlight 应用程序。

当发布了SLARToolkit,是我终于有时间来实现使用 Silverlight 4 网络摄像头 API 的实时人脸检测。

本文将描述特定大小的皮肤颜色区域网络摄像头快照中的搜索的简单面部识别方法。

这项技术是不是使用作为专业的计算机视觉库如OpenCV和Haar 样功能完善,但它运行实时和大多数网络摄像头方案的作品。

演示应用您需要一个网络摄像头,至少运行示例安装 Silverlight 4 运行库。

现在是可用于Windows和Mac预发布版本。

面部的地区应该会好点亮和背景应在皮肤颜色对比度,以获得最佳效果。

打开示例如何使用您可以启动和停止与网络摄像头, Button,或者您可以从磁盘加载图像,按钮。

使用组合框演示模式从"亮点"改为"图像"。

"突出显示"只是绘制一个红色的椭圆检测到的脸前后"Image"叠加图像面部地区。

猿猴的头是默认图像(图11),但可以通过输入其 URI 在 TextBox 中应用一个不同的图片的。

使用滑块控件可以改变皮肤颜色阈值 YCbCr 颜色空间中的(请参见步骤 2:过滤皮肤颜色)。

(包括重叠的图像)的人脸检测的结果保存到磁盘,按钮。

当您单击时,按钮的第一次了,您需要授予捕捉功能的权限。

此应用程序使用默认 Silverlight 捕获设备。

您可以使用 Silverlight 配置指定默认视频和音频设备。

只是在应用程序上按鼠标右键单击上下文菜单中的"Silverlight"、选择"网络摄像头/麦克风"选项卡来设置它们。

SilverLight学习笔记--Silverligh之Json的通讯传递

SilverLight学习笔记--Silverligh之Json的通讯传递

JSON是一种轻量级的数据传输类型,它可以通过序列化把一个简单对象转换为一个简单的字符串,在网络中进行传输,然后在客户端进行反序列化,得到原始对象.功能上和XML差不多,只是它的体积小,在客户端解析方便,所以被广泛使用.我们可以使用Silverlight提供的三个类来完成JSON数据的传递和接收。

它们是:1、DataContractJsonSerializer (位于 System.Runtime.Serialization. Json)2、JsonObject (位于System.Json,将JSON数据流转换成为可读写的对象)3、JsonArray (位于System.Json, 对JSON数据流转换成为JsonObject数组形式,可支持LINQ查询)注:如果要引用System.Runtime.Serialization.Json名空间里的Json,则必须也引用System.ServiceModel,否则Json会无法使用。

在本例中,我们将使用它来进行示例。

下面我们一起来学习在Silverlight中如何从服务器端向客户端传递Json数据。

新建一个Silverlight应用程序。

命名为:SLJson(一)准备工作在这里,我们完成三种情况的Json数据传递。

1、一个Person类(其属性均为简单类型:String类型)2、Customers类,它是Person类的一个List。

3、一个PersonT类(它包含另一个类 Address)我们要传递这三种情况的类对象实例到客户端并显示出来。

所以,在此,我们首先要在服务器端和客户端分别建立上面的三个类。

Person类服务器端代码定义如下:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Runtime.Serialization;//要引用System.Runtime.Serializati on.Dll才能使用[DataContract]与[DataMember]属性namespace SLJson.Web{[DataContract]public class Person{[DataMember]public string Name { get; set; }[DataMember]public int Age { get; set; }[DataMember]public string Address { get; set; }}}客户端代码定义如下:using System;using ;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;namespace SLJson{public class Person{public string Name { get; set; }public int Age { get; set; }public string Address { get; set; }}}Customers类服务器端代码定义如下:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Runtime.Serialization; //要引用System.Runtime.Serializat ion.Dll才能使用[DataContract]与[DataMember]属性namespace SLJson.Web{[DataContract]public class Customers{[DataMember]public List<Person> Persons { get; set; }}}客户端代码定义如下:using System;using ;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using System.Collections.Generic; //要引入此空间以使用Listnamespace SLJson{public class Customers{public List<Person> Persons { get; set; }}}PersonT类服务器端代码定义如下:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Runtime.Serialization;//要引用System.Runtime.Serializati on.Dll才能使用[DataContract]与[DataMember]属性namespace SLJson.Web{[DataContract]public class PersonT{[DataMember]public string Name { get; set; }[DataMember]public int Age { get; set; }[DataMember]public Address Address { get; set; }}}客户端代码定义如下:using System;using ;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;namespace SLJson{public class PersonT{public string Name { get; set; }public int Age { get; set; }public Address Address { get; set; }}}PersonT类内含的Address类服务器端代码定义如下:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Runtime.Serialization;//要引用System.Runtime.Serializati on.Dll才能使用[DataContract]与[DataMember]属性namespace SLJson.Web{[DataContract]public class Address{[DataMember]public string country { get; set; }[DataMember]public string city { get; set; }}}客户端代码定义如下:using System;using ;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;namespace SLJson{public class Address{public string country { get; set; }public string city { get; set; }}}至此,我们的应用程序如下图:(二) 实现Json数据的传递。

Silverlight与数据库交互示例

Silverlight与数据库交互示例

SilverLight目前已经成为互联网应用当中的终点,其本身具有的巨大市场前景,尤其是提供丰富的网路表示控件方面已经成为了flash的最大竞争对手,几天我们通过一个简单的示例演示如何使用SilverLight创建一个使用数据访问的应用,同时为了配合微软最新的.NET 3.5技术,这个例子还将使用微软的LINQ数据源作为数据集合的基础,使用WCF进行远程的数据访问,从而实现分布式调用。

整个过程共分为5个部分1.创建一个SilverLight应用2.创建一个使用LINQ的数据源映射对象3.创建一个WCF应用4.在SilverLight中添加对WCF的引用5.在SilverLight添加DataGrid数据显示控件1 创建一个SilverLight应用本程序使用Visual Studio 2008中创建新的SilverLight应用。

在Visual Studio 2008中只要安装了SilverLight 2.0 Beta 1的Visual Studio 2008模板即可看到如下图1.1所示的新工程模板,图1.1 新建SilverLight 2.0工程在新建Sl工程的时候有一个选项,就是是否添加的网站作为宿主如下图1.2所示图1.2 选择是否添加网站应用在这里我们为了后面编辑数据库应用服务器,选择添加 2.0的网站,添加之后的工程窗体项目文件如下图1.3所示1.3 添加工程以后的应用界面可以看到Sl被编译成为了一个SilverLightDemo.xap文件,这个文件到底是什么内容呢,我们在这里对它的内容进行解密,首先修改文件后缀为zip之后解压缩,就可以看到文件是把SL运行需要调用的程序打包之后随应用程序提供。

图1.4显示了这几个文件图1.4 SilverLightDemo.xap所包含的文件这些文件除了基本的SL库文件之外还有一个应用程序描述文件,AppMainfest.xaml,这个文件记录了当前应用程序所使用的基本业务逻辑和表示层内容。

WPFSilverlight数据验证方式汇总

WPFSilverlight数据验证方式汇总

WPFSilverlight数据验证方式汇总数据验证一.数据验证方式可以使用以下任一种方式实现验证1.Exception需要将Binding的ValidatesOnExceptions设为true,当访问数据对象的Set访问器并抛出异常时验证不通过2.IDataError绑定到控件并需要实现验证的对象实现该接口,同时需要将Binding的ValidatesOnDataErrors设为true该接口有两个成员:string Error { get; }整个对象的验证错误信息string this[string columnName] { get; }验证时传入属性名获取该字段的验证结果字符串,如果该串为String.Empty或null时则验证通过。

3.DataAnnotations需要引用/doc/608548957.html,ponentModel.Data Annotations.dll使用此方法验证不通过时会引发ValidationException,因此同样需要将Binding的ValidatesOnExceptions设为true将从ValidationAttribute派生的特性置于属性前,然后在Set访问器中调用Validator.ValidateProperty,格式如下:private string _password;[StringLength(6, ErrorMessage="密码不能超过6个字符")]public string Password{get { return _password; }set{Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Password" });_password = value;}}MemberName为属性名,用于获取正确的错误信息。

1 Silverlight访问MSSQL数据库

1 Silverlight访问MSSQL数据库

Silverlight访问MSSQL数据库在银光中国网()有一篇"Silverlight与常用数据库互操作系列"文章,其中介绍了使用Silverlight存取不同数据库的方法和步骤。

但是对于Silverlight存取MS SQL介绍的不够全面,这里我想介绍Silverlight 如何通过WCF访问MSSQL数据库存储过程的。

希望对大家能够有所帮助。

我们要实现,用户输入用户名和密码后,点击登录按钮,传递用户名和密码到服务器端, 通过WCF访问MSSQL数据库,调用存储过程,在服务器端对用户名和密码进行匹配,匹配成功,则返回登录成功,否则,则是失败。

在文章开始前,我们需要做一下准备工作,∙开发环境需求: VS2008 SP1, Silverlight 3 Develop Tools for VS2008 SP1,客户端Silverlight 3 Runtime, MSSQL 2005 SP3 ;∙建立例程数据库 SilverlightDemo,在数据库中建立一个新表 Users,包含以下字段;添加内容到Users表,为了方便起见,密码全部使用明文,在正式项目中,建议对密码字段进行加密使用。

这里,我们验证用户名和密码,有两种简单方式,一是使用存储过程读取用户名和密码,然后在服务器端进行用户名和密码匹配校验,如果查找到匹配数据,则返回登录成功,否则,则是登录失败;二是传用户名和密码到存储过程中,在数据库存储过程中进行判断,使用Select 语句进行查找,对应用户名和密码,如果查找到匹配结果,则返回用户ID,服务器端接收到用户ID,则返回登录成功,否则,则是失败;在本例中,主要是对Silverlight访问数据库进行讲述,所以,对于验证方法,不进行详细描述和讲解,如果有问题,可以留言给我,我们继续讨论,这里,我将使用第一种验证方法。

为此,建立一个简单的存储过程:1CREATE PROCEDURE[dbo].[Login]2 ( @UserName Varchar(30))3AS45Select cUserName, cPassword6From Users7Where cUserName =@UserName89RETURN1011SET NOCOUNT ON在完成上面的准备工作后,开始建立新的Silverlight项目,1. 建立一个新项目"SilverlightDBDemo",2. 在MainPage中建立简单的登录界面,如下:3. 在Web项目中添加新选项4. 添加一个简单的用户信息类Users,作为WCF的契约成员,当我们从数据库中读取信息后,将赋值给该类的契约成员,方便客户端进行调用;VS2008将自动生成Users类代码,在类命名前添加数据契约属性[DataContract()]。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Silverlight 数据验证本文引用自/jv9/archive/2010/09/10/1822910.html页面有实例的源代码下载:说起来Validation验证功能,相信大家都不陌生,在应用中,当需要用户交互输入时,开发人员都会加入一些验证代码,这样可以有效的避免应用异常出现,也可以使应用的错误提示信息清晰明了的显示在客户端,有利于异常定位,同时也提高用户体验。

特别是在商业应用项目中,使用Validation功能,可以在数据存入存储设备前,进行格式,以及内容的校验,这样也提高了数据存储的安全性。

下面的的验证控件演示,是传统Web应用中最常见的验证效果,其中包括Requ ired Field Validator,Range Validator等验证控件,Ajax Validation:而Silverlight同样提供类似于验证控件的支持,在Silverlight Toolkit开源项目中,包含Data Input的Validation演示,简单数据绑定验证,下图为ValidationSummary控件演示:为了帮助大家学习和掌握Silverlight的Validation功能,随后的几篇,我将详细介绍一下S ilverlight的Validation功能,并将结合一些实例演示帮助大家理解Validation验证功能。

本系列应用开发环境是:Windows 7 Ultimate 英文版Visual Studio 2010 Premium 英文版Expression Blend 4 Premium 英文版Silverlight 4Validation验证概述Validation,是验证,校验的意思,通常发生在用户输入数据后,进行验证判断,以确认用户输入正确信息。

在验证的方法中,我们可以简单的从两个验证类型理解Validation,1. 语法验证,该验证类型是通过成员的数据类型定义对比验证当前输入数据类型得出的验证结果;例如,定义一个int类型,而赋值是string时,则会返回错误异常,验证控件,将获取该异常信息反馈到客户端;1publicint Zip {get;set}语法验证经常发生在数据改变之前,其表现方式会在UI中体现;2. 语义验证,该验证类型是将当前输入数据根据特定数据限制代码进行验证;例如:指定某TextBox为必须输入,或者限定某TextBox内容长度,或者使用正则表达式控制其输入内容,最典型的例子是对电子邮件地址的验证:语义验证通常会发生在数据改变之后,其表现方式可以由开发人员控制,不一定会在UI中体现;一个简单的数据绑定,异常捕获验证时序图,本篇,不计划讲解该图,我将在随后的实例中,解释该验证原理。

现在,我们将创建一个新的实例项目,SilverlightValidationDemo在MainPage,创建简单的用户交互界面:另外需要准备一个简单的数据成员类,方便随后的演示,在实例演示前,我们仍旧需要先学习一下Silverlight的Validation数据验证框架基础属性和事件,首先需要了解的是BindingValidationError事件该事件是一个路由事件,当数据验证错误出现时,将绑定该错误到数据源;也可以简单的理解为绑定错误到数据源的一个行为。

该事件可在控件本身调用,也可在其父控件中调用。

例如,在TextBox中,可以声明调用BindingValidationError,或者可以该TextBox的父容器控件Grid,StackPanel中调用BindingValidationError事件。

这里需要注意的是,如果在Silverlight的MVVM设计模式下,仅在被验证的控件本身激活BindingValidationError 事件,才能正常的被UI捕获到错误信息,不支持在父控件中对BindingValidationError事件进行调用。

为了保证Validation的灵活性,微软同时提供了相关属性,来控制BindingValidationErro r事件的调用。

NotifyOnValidationError和ValidatesOnExceptions属性。

NotifyOnValidationError属性该属性的功能,是当验证错误出现时是否激活BindingValidationError事件;该属性是Sil verlight独有的验证属性之一,经常和ValidatesOnExceptions属性配合使用。

ValidatesOnExceptions属性该属性的功能,数据绑定引擎是否捕获显示异常错误作为验证错误。

简单的理解,在控件绑定数据时,出现数据源异常抛出,或者数据类型转换时异常抛出,是否作为Validation验证显示在客户端。

如果是True,则会按照Validation传统的处理方式,弹出一个红色说明标签,内容是异常错误信息,反之,则不捕获异常作为Validation。

对于Silverlight开发新手而言,初次看到以上概念,会有混淆,请继续看下面实例,结合实例来理解以上的属性和事件使用方法。

首先,我们在MainPage中,将我们起初定义的User类添加作为一个静态数据源,1xmlns:local="clr-namespace:SilverlightValidationDemo"1<UserControl.Resources>2<local:User x:Key="UserDataContext"/>3</UserControl.Resources>对于控件数据绑定,在Visual Studio中可以通过视图设定,也可以直接敲入代码设定,这里,我们使用视图的方法,减少代码输入量,在MainPage中,选中txtUserName文本框,右键选择属性,在属性框中,设置绑定数据源,选择Common - DataContext,然后选择“Apply Data Binding.." 选择数据源这里,数据源可以选择外部数据源,也可以选择Element绑定源,我们则使用StaticResou rce静态数据源,也就是我们刚才创建的UserDataContext,选中后,绑定数据源已经完成,则需要设置控件绑定字段设置,选择Common - Text属性,然后选择Apply Data Binding...,进入后可以看到,数据源,已经绑定为“DataContext - User”,而数据源中的成员名称已经被自动列出,我们需要指定绑定成员名称,然后,选择“Options”,在选项中,选中“NotifyOnValidationError”和“ValidatesOnExcepti ons”,这样控件绑定设置已经完成了,这时,可以切换到Xaml代码界面查看一下当前txtUserNa me的代码可以发现,Visual Studio 2010已经自动生成了绑定代码,如下:1<TextBox x:Name="txtUserName" Width="200"DataContext="{Binding Source={Static ResourceUserDataContext}}" Text="{Binding Path=Name, Mode=TwoWay, ValidatesOn Exceptions=True, NotifyOnValidationError=True}"/>现在,我们在name数据成员属性中,添加简单的判断代码:1privatestring _name;2publicstring Name3{4get { return _name; }5set6{7if (string.IsNullOrEmpty(value))8{9thrownew Exception("用户名不能为空.");10}11_name = value;12}13}这样一个简单的Validation数据验证功能就完成了。

大家可以试着将ValidatesOnExceptions=True代码设为False,看看是否还能捕获异常验证?下面,看看BindingValidationError事件和NotifyOnValidationError属性的应用,我们添加一个TextBlock控件,用来显示验证异常信息,1<StackPanel Orientation="Horizontal">2<TextBlock x:Name="tbMessage" Margin="5" Foreground="Red"/>3</StackPanel>在MainPage中的LayoutRoot布局控件中,添加BindingValidationError事件,1<Grid x:Name="LayoutRoot" Background="White"BindingValidationError="LayoutRo ot_BindingValidationError">后台定义:1privatevoid LayoutRoot_BindingValidationError(object sender, ValidationErrorE ventArgs e)2{3if (e.Action == ValidationErrorEventAction.Added)4{5(e.OriginalSource as Control).Background = new SolidColorBrush(Colors.Yellow); 6tbMessage.Text= e.Error.Exception.Message;7}89if (e.Action == ValidationErrorEventAction.Removed)10{11(e.OriginalSource as Control).Background = new SolidColorBrush(Colors.White); 12tbMessage.Text = "";13}14}在验证异常出现时,由于NotifyOnValidationError属性设置为True,所以,会执行Bindi ngValidationError事件,其中tbMessage会显示验证错误信息,而验证控件样式也会有改变。

相关文档
最新文档