在Silverlight3中对数据进行校验不再像Silverlight2中那样麻烦了,下面就简要演示一下。
首先,我们创建一个Silverlight3应用,名为:"ValidateSample"
然后将下面的xaml代码复制到"MainPage.xaml"中:
<
Grid
x:Name
="LayoutRoot"
Background
="AliceBlue"
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
="50"
/>
<
RowDefinition
Height
="50"
/>
<
RowDefinition
Height
="150"
/>
<
RowDefinition
Height
="50"
/>
</
Grid.RowDefinitions
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
="50"
></
ColumnDefinition
>
<
ColumnDefinition
Width
="300"
></
ColumnDefinition
>
</
Grid.ColumnDefinitions
>
<
TextBlock
Text
="地址:"
Grid.Row
="0"
Grid.Column
="0"
VerticalAlignment
="Center"
HorizontalAlignment
="Right"
/>
<
TextBox
Margin
="5"
Name
="Address"
VerticalAlignment
="Center"
Width
="192"
Grid.Row
="0"
Grid.Column
="1"
Text
="
{Binding Address,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}
"
/>
<
TextBlock
Text
="标题:"
Grid.Row
="1"
Grid.Column
="0"
VerticalAlignment
="Center"
HorizontalAlignment
="Right"
/>
<
StackPanel
Grid.Row
="1"
Grid.Column
="1"
Orientation
="Horizontal"
HorizontalAlignment
="Right"
>
<
TextBox
Margin
="5"
Name
="Title"
VerticalAlignment
="Center"
Grid.Row
="1"
Grid.Column
="1"
Width
="160"
Text
="
{Binding Title,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}
"
/>
<
ComboBox
Name
="EmailFormat"
Width
="80"
Height
="20"
SelectedIndex
="
{Binding Format,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}
"
>
<
ComboBoxItem
Content
="邮件格式"
></
ComboBoxItem
>
<
ComboBoxItem
Content
="Html"
></
ComboBoxItem
>
<
ComboBoxItem
Content
="Text"
></
ComboBoxItem
>
</
ComboBox
>
</
StackPanel
>
<
TextBlock
Text
="内容:"
Grid.Row
="2"
Grid.Column
="0"
VerticalAlignment
="Center"
HorizontalAlignment
="Right"
/>
<
TextBox
Margin
="5"
Name
="Body"
Grid.Row
="2"
Grid.Column
="1"
Width
="230"
Height
="130"
Text
="
{Binding Body,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}
"
/>
<
Button
Grid.Row
="3"
Grid.Column
="1"
Content
=" 提 交 "
Width
="100"
Height
="30"
FontSize
="16"
/>
<!--
Click="OnSubmit"
-->
</
Grid
>
然后就是相应的校验信息类,本示例使用Email校验,相应的CS代码:
public
class
EmailInfo
{
string
address;
string
title;
string
body;
int
format;
public
EmailInfo(
string
address,
string
title,
string
body,
int
format)
{
this
.address
=
address;
this
.title
=
title;
this
.body
=
body;
this
.format
=
format;
}
public
string
Address
{
get
{
return
address; }
set
{
CheckFieldLength(value,
1
,
100
);
if
(
!
System.Text.RegularExpressions.Regex.IsMatch(value,
@"
^[\w\.]+@[A-Za-z0-9-_]+[\.][A-Za-z0-9-_]
"
))
throw
new
Exception(
"
邮件格式无效!
"
);
address
=
value;
}
}
public
string
Title
{
get
{
return
title; }
set
{
CheckFieldLength(value,
1
,
100
);
title
=
value;
}
}
void
CheckFieldLength(
string
value,
int
min,
int
max)
{
if
((value.Length
<
min)
||
(value.Length
>
max))
throw
new
Exception(
"
内容长度应在:
"
+
min
+
"
至
"
+
max);
}
public
string
Body
{
get
{
return
body; }
set
{
CheckFieldLength(value,
1
,
100
);
body
=
value;
}
}
public
int
Format
{
get
{
return
format; }
set
{
if
(value
==
0
)
throw
new
Exception(
"
请选择相应的邮件格式!
"
);
format
=
value;
}
}
}
然后,我们只要在MainPage.xaml.cs文件中添加如下代码:
public
MainPage()
{
InitializeComponent();
this
.Loaded
+=
OnLoaded;
}
void
OnLoaded(
object
sender, RoutedEventArgs e)
{
this
.DataContext
=
new
EmailInfo(
"
[email protected]
"
,
"
你好!
"
,
"
这是邮件内容
"
,
1
);
}
接着,运行一下代码:
另外,如果想要收集错误信息,以便统一进行显示的话,可以使用“OnValidationError”事件,如下:
public
ObservableCollection
<
ValidationError
>
Errors {
get
;
set
; }
public
MainPage()
{
InitializeComponent();
this
.Errors
=
new
ObservableCollection
<
ValidationError
>
();
this
.Loaded
+=
OnLoaded;
}
void
OnLoaded(
object
sender, RoutedEventArgs e)
{
this
.DataContext
=
new
EmailInfo(
"
[email protected]
"
,
"
你好!
"
,
"
这是邮件内容
"
,
1
);
}
private
void
OnValidationError(
object
sender, ValidationErrorEventArgs e)
{
if
(e.Action
==
ValidationErrorEventAction.Added)
Errors.Add(e.Error);
else
if
(e.Action
==
ValidationErrorEventAction.Removed)
Errors.Remove(e.Error);
}
这样错误信息就被添加到Errors集合中了。
另外还可以通过“点击提交按钮”方式来统一进行收集,下面是一个Button的Click事件代码:
详情参见这篇Blog :
void
OnSubmit(
object
sender, RoutedEventArgs args)
{
List
<
ValidationError
>
errors
=
new
List
<
ValidationError
>
();
foreach
(UIElement ui
in
LayoutRoot.Children)
{
FrameworkElement fe
=
ui
as
FrameworkElement;
if
(fe
!=
null
)
{
foreach
(ValidationError ve
in
Validation.GetErrors(fe))
{
errors.Add(ve);
}
}
}
}
在结束今天的内容之前,再推荐一个不错的网站:http://playboy.covertocover.com/
这是大名鼎鼎的“花花公子”杂志使用Silverlight开发的应用,相信很多程序员(男性)的收藏夹
又会多一个链接了,呵呵:)
好了,今天的内容就先到这里了。源码下载,请点击这里。
原文链接:http://www.cnblogs.com/daizhj/archive/2009/04/02/1428151.html
作者: daizhj, 代震军
Tags: silverlight,3 beta,data-validate,数据校验
网址: http://daizhj.cnblogs.com/