概述
众所周知,在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
///
http://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事件:
<!--
http://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
///
http://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中对于数据输入做验证 了。
本文介绍在Silverlight应用中实现数据验证的方法。通过设置属性并利用验证错误事件,可在输入不合法时捕获异常并提示用户。
94

被折叠的 条评论
为什么被折叠?



