概述
众所周知,在ASP.NET应用程序中,我们可以使用验证控件进行数据输入的验证,遗憾的是在Silverlight中并没有提供任何验证控件,但Silverlight对于双向数据绑定还是提供了一些基本的数据验证支持,我们可以在set设置器中定义验证规则,并对于不合法数据抛出异常,最后通过捕获验证错误事件来实现数据的验证。
本文将介绍在Silverlight应用程序中如何进行数据验证。
准备知识
Silverlight中如下两种情况下,将会触发验证错误:
1.在绑定引擎中执行数据转换时抛出异常
2.在业务实体的set设置器中抛出异常
ValidatesOnExceptions:告诉绑定引擎当有异常发生时创建一个验证异常
BindingValidationError事件定义在FrameworkElement中,通过它可以接收到ValidationErrorEventArgs类型的参数,而在ValidationErrorEventArgs中定义了一个很重要的属性Action,它的定义如下:
实例
首先我们编写一个简单的业务类,由于数据绑定验证只能在双向绑定中,所以这里需要实现INotifyPropertyChanged接口,如下代码所示,在set设置器中我们对于数据的合法性进行检查,如果不合法则抛出一个异常:
/// <summary> /// Author:TerryLee /// [url]http://www.cnblogs.com/Terrylee[/url] /// </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)); } } }
<!-- [url]http://www.cnblogs.com/Terrylee[/url] --> <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,ValidatesOnExceptions=true}" BindingValidationError="txtAge_BindingValidationError"> </TextBox> <my:Message x:Name="messageAge"></my:Message> </StackPanel>
/// <summary> /// Author:TerryLee /// [url]http://www.cnblogs.com/Terrylee[/url] /// </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中对于数据输入做验证了。
总结
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。