Silverlight实用窍门系列:57.Silverlight中的Binding使用(二)-数据验证
本文将简单讲述Silverlight中的Binding数据时的数据验证。
NotifyOnValidationError:是否在出现异常/错误信息的时候激发BindingValidationError事件。
ValidatesOnExceptions:是否将异常信息作为错误信息显示出来。
ValidatesOnDataErrors:结合IDataErrorInfo接口以显示错误信息。
BindingValidationError:这是一个路由事件,当绑定数据的源对象A有错误的时候,抛出异常让此事件接收并且触发,当源对象A没有BindingValidationError事件的时候让其父对象的BindingValidationError事件接收并且触发。
首先我们写一个用户类,并且在属性中进行简单验证错误时抛出异常如下代码:
public class User
{
private string m_UserName; public string UserName
{
get { return m_UserName; }
set
{
if (value.Length < )
{
throw new Exception("用户名小于3个字符");
}
m_UserName = value;
}
} private string m_UserPwd; public string UserPwd
{
get { return m_UserPwd; }
set
{
if (value.Length < )
{
throw new Exception("密码长度不能小于6");
}
m_UserPwd = value;
}
}
}
然后我们来看Xaml代码演示一个登录时数据绑定的界面:
<Grid x:Name="LayoutRoot" Background="White" >
<Canvas Name="canvasUser" BindingValidationError="canvasUser_BindingValidationError"
Loaded="canvasUser_Loaded">
<sdk:Label Height="" Name="lbpwd" Width="" Canvas.Left="" Canvas.Top=""
Content="密 码:" />
<sdk:Label Canvas.Left="" Canvas.Top="" Height="" Name="lbusername"
Width="" Content="用户名:" />
<TextBox x:Name="tbUserName" Width="" Margin=""
Text="{Binding Path=UserName, Mode=TwoWay,
NotifyOnValidationError=True,ValidatesOnExceptions=True}"
Canvas.Left="" Canvas.Top="" />
<TextBox x:Name="tbUserPwd" Width="" Margin=""
Text="{Binding Path=UserPwd, Mode=TwoWay,
NotifyOnValidationError=False,ValidatesOnExceptions=True}"
Canvas.Left="" Canvas.Top="" />
<Button Height="" Width="" Content="提 交"
Canvas.Left="" Canvas.Top="" />
</Canvas>
</Grid>
最后将User类绑定到前台界面原始,并且描述BindingValidationError事件时将TextBox边框变为红色。
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
} private void canvasUser_BindingValidationError(object sender, ValidationErrorEventArgs e)
{ TextBox tb = e.OriginalSource as TextBox;
if (e.Action == ValidationErrorEventAction.Added)
{
tb.BorderBrush = new SolidColorBrush(Colors.Red);
}
else if (e.Action == ValidationErrorEventAction.Removed)
{
tb.BorderBrush = new SolidColorBrush(Colors.White);
}
} private void canvasUser_Loaded(object sender, RoutedEventArgs e)
{
this.canvasUser.DataContext = new User();
}
}
实现效果如下图,在输入非正确的字符数目的时候会自动提示错误,如需源码请点击SLBinding2.rar 下载。

Silverlight实用窍门系列:57.Silverlight中的Binding使用(二)-数据验证的更多相关文章
- Silverlight实用窍门系列:2.Silverlight动态加载外部XML指定地址的WebService---(动态加载外部XML文件中指定的WebService地址)【附带实例源码】
接上节所讲的,Silverlight可以加载外部的XML文件里面的内容,那么我们可不可以在外部XML里面配置一个WebService地址,并且以此加载这个地址来动态加载WebService呢?这样子就 ...
- Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别
问题一:在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A.B.C.D.E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有 ...
- 转载 Silverlight实用窍门系列:1.Silverlight读取外部XML加载配置---(使用WebClient读取XAP包同目录下的XML文件))
转载:程兴亮文章,地址;http://www.cnblogs.com/chengxingliang/archive/2011/02/07/1949579.html 使用WebClient读取XAP包同 ...
- [转载]Silverlight实用窍门系列:71.Silverlight的Style
本文版权归作者和博客园共有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 原文链接:http://www.cnblogs.com/chengx ...
- Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary
允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://chengxingliang.blog.51cto.com/3972944/886643 ...
- Silverlight实用窍门系列:1.Silverlight读取外部XML加载配置---(使用WebClient读取XAP包同目录下的XML文件))【附带实例源码】
使用WebClient读取XAP包同目录下的XML文件 我们想要读取XAP包下面的XML文件,需要将此XML文件放在加载XAP包的网页的目录中去,然后使用URI方式读取此URL方式下的XML文件. 首 ...
- SSIS 系列 - 在 SSIS 中使用 Multicast Task 将数据源数据同时写入多个目标表,备份数据表,以及写入Audit 信息
转自http://www.cnblogs.com/biwork/p/3328838.html 在 SSIS Data Flow 中有一个 Multicast 组件,它的作用和 Merge, Merge ...
- 【转】Struts1.x系列教程(2):简单的数据验证
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/13/251197.html 简单验证从本质上说就是在服务端 ...
- Windows 8实用窍门系列:20.Windows 8中的GridView使用(二)和DataTemplateSelector
在本文中所讲述内容的实例仍然沿用于上篇文章,有什么疑惑可以参考上篇文章. 一 GroupStyle 在GridView控件中我们可以对数据进行分组显示,通过对GridView的GroupStyle进行 ...
随机推荐
- JNDI的学习与使用
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...
- 【Linux_Unix系统编程】Chapter4 文件IO
Chapter4 文件IO 4.1 概述 文件描述符 == Windows的句柄 标准文件描述符: 0 标准输入 STDIN_FILENO stdin 1 标准输出 STDOUT_FILENO std ...
- solr 7+tomcat 8 + mysql实现solr 7基本使用(安装、集成中文分词器、定时同步数据库数据以及项目集成)
基本说明 Solr是一个开源项目,基于Lucene的搜索服务器,一般用于高级的搜索功能: solr还支持各种插件(如中文分词器等),便于做多样化功能的集成: 提供页面操作,查看日志和配置信息,功能全面 ...
- JavaScript语句和异常
知识内容: 1.条件语句(分支语句) 2.循环语句 3.with语句 4.异常处理 5.本节练习 参考资料:<JavaScript高级程序设计> 1.条件语句 JavaScript中的条件 ...
- JavaScript字符串练习
题目: 预备代码: // 自定义输出 var log = function () { console.log.apply(this, arguments); }; // ====== // 测试 // ...
- 掩膜操作手写+API(第二天)
1.1首先是用到的理论知识: 上面是一个通用的公式,光知道上面写程序还是有点麻烦的,下面公式画的有点丑,可以表达我的观点. 1.2用到的知识点:可以边看程序边看用到的知识点: CV_Assert(); ...
- python 逐行读取文本
f = open("foo.txt") # 返回一个文件对象line = f.readline() # 调用文件的 readline()方法while line: print li ...
- ECLIPSE修改xml配置文件TOMCAT不生效的解决
昨天和今天一直想研究一下SSH的项目,但把项目导入ECLIPSE后配置数据库时发现无论如何修改配置文件,TOMCAT上的文件还是旧文件,从未变过. 感觉很神奇也很崩溃,重启ECLIPSE,CLEAN, ...
- 使用Linux命令行测试网速-----speedtest-cli
https://github.com/sivel/speedtest-cli 当发现上网速度变慢时,人们通常会先首先测试自己的电脑到网络服务提供商(通常被称为“最后一公里”)的网络连接速度.在可用于测 ...
- cmake编译参数
进入源码目录后 cmake . -LH --查看之前编译参数 ccmake . 使用cmake gui界面进行查看和编辑编译用到的参数 (推荐) 源码目录下 INSTALL-SOURCE 文件后面 ...