本文将简单讲述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使用(二)-数据验证的更多相关文章

  1. Silverlight实用窍门系列:2.Silverlight动态加载外部XML指定地址的WebService---(动态加载外部XML文件中指定的WebService地址)【附带实例源码】

    接上节所讲的,Silverlight可以加载外部的XML文件里面的内容,那么我们可不可以在外部XML里面配置一个WebService地址,并且以此加载这个地址来动态加载WebService呢?这样子就 ...

  2. Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别

    问题一:在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A.B.C.D.E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有 ...

  3. 转载 Silverlight实用窍门系列:1.Silverlight读取外部XML加载配置---(使用WebClient读取XAP包同目录下的XML文件))

    转载:程兴亮文章,地址;http://www.cnblogs.com/chengxingliang/archive/2011/02/07/1949579.html 使用WebClient读取XAP包同 ...

  4. [转载]Silverlight实用窍门系列:71.Silverlight的Style

    本文版权归作者和博客园共有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 原文链接:http://www.cnblogs.com/chengx ...

  5. Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary

      允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://chengxingliang.blog.51cto.com/3972944/886643 ...

  6. Silverlight实用窍门系列:1.Silverlight读取外部XML加载配置---(使用WebClient读取XAP包同目录下的XML文件))【附带实例源码】

    使用WebClient读取XAP包同目录下的XML文件 我们想要读取XAP包下面的XML文件,需要将此XML文件放在加载XAP包的网页的目录中去,然后使用URI方式读取此URL方式下的XML文件. 首 ...

  7. SSIS 系列 - 在 SSIS 中使用 Multicast Task 将数据源数据同时写入多个目标表,备份数据表,以及写入Audit 信息

    转自http://www.cnblogs.com/biwork/p/3328838.html 在 SSIS Data Flow 中有一个 Multicast 组件,它的作用和 Merge, Merge ...

  8. 【转】Struts1.x系列教程(2):简单的数据验证

    转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/13/251197.html 简单验证从本质上说就是在服务端 ...

  9. Windows 8实用窍门系列:20.Windows 8中的GridView使用(二)和DataTemplateSelector

    在本文中所讲述内容的实例仍然沿用于上篇文章,有什么疑惑可以参考上篇文章. 一 GroupStyle 在GridView控件中我们可以对数据进行分组显示,通过对GridView的GroupStyle进行 ...

随机推荐

  1. unity3d将C#打包成dll方法

    方法一:用vs新建工程-C#库,添加UnityEngine.dll引用,注意.netframwork选3.5,编译C#脚本得到dll: 方法二:使用mono的mcs,具体如下 c#提供了dll打包,但 ...

  2. django的forms

    base知识 参考博文:https://www.cnblogs.com/yuanchenqi/articles/9036474.html 用户表单是Web端的一项基本功能,大而全的Django框架中自 ...

  3. uva-10160-枚举

    若当前搜索到的城市n前面1-n-1编号的城市中有没有通电的,则永远也无法输送电力给那个城市,因为在剪枝时附加了和此结点连接的最大结点小于当前的结点 这段 for(int i = 1; i < c ...

  4. attack source code

    不废话,直接上代码, 先看截图use pictures;

  5. Redis 集合 set 操作, 有序集合

    01, 唯一性, 确定性, 无序性 ( 结合的三大特性 ) 02, 新建集合, 或者往集合中添加数据 => sadd key value1 value2 value3 ....... 03, 查 ...

  6. PHP 程序员学数据结构与算法之《栈》

    “要成高手,必练此功”.   要成为优秀的程序员,数据结构和算法是必修的内容.而现在的Web程序员使用传统算法和数据结构都比较少,因为很多算法都是包装好的,不用我们去操心具体的实现细节,如PHP的取栈 ...

  7. 5.log4j报错

    java.lang.UnsupportedClassVersionError: org/apache/log4j/Logger : Unsupported major.minor version 51 ...

  8. vue深入了解组件——插槽

    一.插槽内容 Vue实现了一套内容分发的API,这套API基于当前的Web Components规范草案,将 <slot>  元素作为承载分发的内容的出口. 它允许你像这样合成组件: &l ...

  9. 通过sizeof获得数组长度的方法

    int a[20]; int len = sizeof(a)/sizeof(*a); //值为20,即数组长度为20 注:sizeof是一个操作符,sizeof的值在编译时确定

  10. 关于HTTP协议及SOCKET通信

    一.HTTP 1.报文结构 HTTP:超文本传输协议,报文分为请求报文和响应报文. 2.端口(tomcat端口) http在熟知的80端口使用TCP的服务:tomcat的默认端口是8080 3.状态码 ...