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 < 3)
{
throw new Exception("用户名小于3个字符");
}
m_UserName = value;
}
}

private string m_UserPwd;

public string UserPwd
{
get { return m_UserPwd; }
set
{
if (value.Length < 6)
{
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="28" Name="lbpwd" Width="55" Canvas.Left="16" Canvas.Top="51"
Content="密 码:" />
<sdk:Label Canvas.Left="16" Canvas.Top="15" Height="28" Name="lbusername"
Width="55" Content="用户名:" />
<TextBox x:Name="tbUserName" Width="88" Margin="10"
Text="{Binding Path=UserName, Mode=TwoWay,
NotifyOnValidationError=True,ValidatesOnExceptions=True}"
Canvas.Left="91" Canvas.Top="5" />
<TextBox x:Name="tbUserPwd" Width="88" Margin="10"
Text="{Binding Path=UserPwd, Mode=TwoWay,
NotifyOnValidationError=False,ValidatesOnExceptions=True}"
Canvas.Left="91" Canvas.Top="45" />
<Button Height="30" Width="70" Content="提 交"
Canvas.Left="54" Canvas.Top="93" />
</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 下载。


本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2012/02/27/2367892.html,如需转载请自行联系原作者

相关文章
CAP 理论 —最通俗易懂的解释
CAP 理论是分布式系统的一个基础理论,它描述了任何一个分布式系统最多只能满足以下三个特性中的两个: 1:一致性(Consistency) 2:可用性(Availability) 3:分区容错性(Partition tolerance) CAP 理论听起来十分抽象,本文尝试以生活中的例子并用通俗易懂的语言来解释 CAP 理论的含义。
2632 0
|
大数据 数据挖掘 BI
几款主流的App统计工具解析:友盟、Talking Data、openinstall
本文简要分析友盟、Talking Data、openinstall的优劣势以及特点,希望能给入门人员一点帮助
5701 0
|
弹性计算 Java Maven
在 IntelliJ IDEA 中部署应用到服务器
在之前的文章《在 Intellij IDEA 中部署 Java 应用到 阿里云 ECS》中讲解了如何将一个本地应用部署到阿里云 ECS 上去,有些读者反馈目前还有一些测试机器是在经典网络,甚至是在本地机房中,咨询是否可以通过 Cloud Toolkit 插件将应用部署到这些服务器上去?最新版本的 Cloud Toolkit 已经发布,完全支持啦。
15718 81
|
SQL Java 数据库连接
【MyBatis-Plus】MyBatis-Plus插件机制以及通用Service、新功能(一)
【MyBatis-Plus】MyBatis-Plus插件机制以及通用Service、新功能(一)
387 0
【MyBatis-Plus】MyBatis-Plus插件机制以及通用Service、新功能(一)
|
Linux Java NoSQL
带你读《Netty、Redis、ZooKeeper高并发实战》之二:高并发IO的底层原理
本书从操作系统底层的IO原理入手,同时提供高性能开发的实战案例,是一本高并发Java编程应用基础图书。
|
网络协议
ETCD Client 的生命周期影响系统TCP连接资源
最近发现一个 ETCD Client 端的实现问题——ETCD 所在机器宕机或者断网的情况下,ETCD Client 无法快速重连到可用的 etcd 节点,导致 client 端不可用(该问题的描述后续发表文章介绍)。
8107 0
|
人工智能 物联网 大数据
【云周刊】第179期:王坚回顾阿里云10年:工程师拿命换来的成就
近日,阿里云创始人王坚在央视最新一期《朗读者》中诵读了乔恩克拉考尔的《进入空气稀薄地带》。 在节目中,他回忆说,现在阿里云的成就是工程师拿命换来的,其实也是最早一批客户拿命在填,就像第一个用电的人一样,从思想上的雏形到成熟,阿里云走过了5年多...更多精彩内容,尽在云周刊!
9443 0
|
JavaScript Java Serverless
|
数据库 NoSQL 存储
带你读《Greenplum:从大数据战略到实现》之三:数据处理平台的演进
这是一本系统剖析Greenplum开源大数据平台的书籍,也是大数据战略制定与落地的实战型指导书!本书围绕数字原生和云计算、大数据、人工智能驱动的企业数字化转型的核心诉求,从商业和技术实战视角分享了业界领先企业大数据战略的深刻思考,并提供了大数据战略从制定到落地的全面指导。既有高阶数字化战略高度对大数据的解读,又有技术实战角度对使用 Greenplum 大数据和机器学习平台实现大数据战略的实践指南。