本文将简单讲述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. C++多线程同步之临界区(CriticalSection)

    原文链接:http://blog.csdn.net/olansefengye1/article/details/53262917 一.Win32平台 1.相关头文件和接口 #include <w ...

  2. Thread 1 cannot allocate new log的问题分析 (转载)

    Thread 1 cannot allocate new log的问题分析 发生oracle宕机事故,alert文件中报告如下错误: Fri Jan 12 04:07:49 2007Thread 1 ...

  3. android 系统架构简介

    Android系统采取的是分层的架构,根据官方文档提供的架构图,我们将android的系统架构分成5层,如图: 1.Application Framework (应用框架) application f ...

  4. Select算法(最坏复杂度O(n))

    #include<iostream> #include <stdio.h> #include <stdlib.h> #include <algorithm&g ...

  5. MAN 手册各章节功能介绍及快捷键键位整理

    前言   Man 手册页(Manua pages ,缩写man page) 是在linux操作系统在线软件文档的一种普遍形式.内容包括计算机程序库和系统调用等命令的帮助手册. 手册页是用troff排版 ...

  6. linux操作系统4 软件包管理

    知识内容: 1.软件包介绍 2.基本软件包安装 3.yum软件包管理 4.apt软件包管理 5.源码安装 一.软件包介绍 1.软件包分类 压缩包形式:类似.tar.gz结尾的文件(源码) rpm: r ...

  7. python super()函数详解

    引言: 在类的多继承使用场景中,重写父类的方法时,可能会考虑到需要重新调用父类的方法,所以super()函数就是比较使用也很必要的解决方法: 文章来源: http://www.cnblogs.com/ ...

  8. uva-639-枚举

    题意: 象棋里的車可以吃横竖的車,题目加了一个墙,用于阻断攻击,问4x4的棋盘最多可以放多少只車, 思路:枚举每一个点,2^16次方种情况 #include<stdio.h> #inclu ...

  9. uva-10167-枚举

    题意:生日蛋糕上面有2N草莓,怎么切能够将蛋糕和草莓平分成俩份,直接枚举,A和B,草莓不能落在直线上 #include <iostream> #include <stdio.h> ...

  10. IPv4报文分片

    1:为什么需要分片 每个数据链路层协议都有自己的帧格式,在这个格式中有一个字段是"数据字段最大长度"(MTU,最大传输单元),当数据报被封装成帧时,数据报的总长度必须小于这个最大长 ...