彩票走势图

在Silverlight应用程序中如何进行数据验证

转帖|其它|编辑:郝浩|2011-01-12 14:44:03.000|阅读 750 次

概述:众所周知,在ASP.NET应用程序中,我们可以使用验证控件进行数据输入的验证,遗憾的是在Silverlight中并没有提供任何验证控件,但Silverlight对于双向数据绑定还是提供了一些基本的数据验证支持,我们可以在set设置器中定义验证规则,并对于不合法数据抛出异常,最后通过捕获验证错误事件来实现数据的验证。 本文将介绍在Silverlight应用程序中如何进行数据验证。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  众所周知,在ASP.NET应用程序中,我们可以使用验证控件进行数据输入的验证,遗憾的是在Silverlight中并没有提供任何验证控件,但Silverlight对于双向数据绑定还是提供了一些基本的数据验证支持,我们可以在set设置器中定义验证规则,并对于不合法数据抛出异常,最后通过捕获验证错误事件来实现数据的验证。

  本文将介绍在Silverlight应用程序中如何进行数据验证。

  准备知识

  Silverlight中如下两种情况下,将会触发验证错误:

  1.在绑定引擎中执行数据转换时抛出异常

  2.在业务实体的set设置器中抛出异常

  为了在验证出错时能够接收到通知,我们必须要在绑定对象上设置如下两个属性为true:

  ValidatesOnExceptions:告诉绑定引擎当有异常发生时创建一个验证异常

  NotifyOnValidationError:告诉绑定引擎当有验证错误发生或者错误排除时触发BindingValidationError事件

  这两个属性都定义在Binding类中,如下代码所示:

  BindingValidationError事件定义在FrameworkElement中,通过它可以接收到ValidationErrorEventArgs类型的参数,而在ValidationErrorEventArgs中定义了一个很重要的属性Action,它的定义如下:

  这里Added表示新增一个验证异常,Removed表示排除了一个验证异常。下面通过一个实例我们看一下如何使用它们进行数据的验证。

  实例

  首先我们编写一个简单的业务类,由于数据绑定验证只能在双向绑定中,所以这里需要实现INotifyPropertyChanged接口,如下代码所示,在set设置器中我们对于数据的合法性进行检查,如果不合法则抛出一个异常:

/// <summary>
/// Author:TerryLee
/// //www.cnblogs.com/Terrylee
/// </summary>
public class Person : INotifyPropertyChanged
{
     public event PropertyChangedEventHandler PropertyChanged;
     private int _age;
     public int Age
     {
         get { return _age; }
         set {
             if (value  < 0)
                 throw new Exception( "年龄输入不合法!");
             _age = value;
             if (PropertyChanged != null)
             {
                 PropertyChanged(this, new PropertyChangedEventArgs( "Age"));
             }
         }
     }

     private String _name =  "Terry";
     public String Name
     {
         get { return _name; }
         set {
             if (value.Length  < 4)
                 throw new Exception( "姓名输入不合法!");
             _name = value;
             if (PropertyChanged != null)
             {
                 PropertyChanged(this, new PropertyChangedEventArgs( "Name"));
             }

         }
     }

     public void NotifyPropertyChanged(String propertyName)
     {
         if (PropertyChanged != null)
         {
             PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
         }
     }
}

  编写数据绑定,如下代码所示,设置NotifyOnValidationError和ValidatesOnExceptions属性为true,并且定义BindingValidationError事件:

<!--
     //www.cnblogs.com/Terrylee
-->
<StackPanel Orientation="Horizontal" Margin="10">
     <TextBox x:Name="txtName"  Width="200" Height="30"
             Text= "{Binding Name,Mode=TwoWay,
             NotifyOnValidationError=true,
             ValidatesOnExceptions=true} "
             BindingValidationError= "txtName_BindingValidationError">
     </TextBox>
     <my:Message x:Name="messageName"></my:Message>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10">
     <TextBox x:Name="txtAge" Width="200" Height="30"
             Text= "{Binding Age,Mode=TwoWay,
             NotifyOnValidationError=true,
             ValidatesOnExceptions=true} "
             BindingValidationError= "txtAge_BindingValidationError">
     </TextBox>
     <my:Message x:Name="messageAge"></my:Message>
</StackPanel>实现BindingValidationError事件,在这里可以根据ValidationErrorEventAction来判断如何进行处理,在界面给出相关的提示信息等,如下代码所示:

/// <summary>
/// Author:TerryLee
/// //www.cnblogs.com/Terrylee
/// </summary>
void txtAge_BindingValidationError(object sender, ValidationErrorEventArgs e)
{
     if (e.Action == ValidationErrorEventAction.Added)
     {
         messageAge.Text = e.Error.Exception.Message;
         messageAge.Validation = false;
     }
     else if (e.Action == ValidationErrorEventAction.Removed)
     {
         messageAge.Text =  "年龄验证成功";
         messageAge.Validation = true;
     }
}

  好了,现在来看一下最后的验证效果,如下图所示:

 

 

  通过这样的方式,我们就可以在Silverlight中对于数据输入做验证了。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP