SilverLight学习笔记--Silverlight之数据校验的实现
在"SilverLight学习笔记--Silverlight之数据绑定初探 "一文中我们探讨了Silverlight界面控件的数据绑定,
在"SilverLight学习笔记--Silverlight中INotifyPropertyChanged 接口在数据绑定中的使用 "一文中我们探讨了如何使用INotifyPropertyChanged 接口实现数据绑定的同步和更新。
在此,我们将利用上面两篇文章所打好的基础来实现Silverlight在双向绑定由目标到数据源更新数据的过程中,对数据的校验实现。
参阅MSDN我们知道,当遇到以下两种情况时,Silverlight将会报告数据验证错误。
2、绑定数据源对象的set访问器抛出异常。
为了获取这些数据验证错误信息,必须将绑定对象的ValidatesOnExceptions属性和NotifyOnValidationError属性设为True。
如本例将用到的TextBox控件定义
VerticalAlignment="Bottom" Margin="10" Width="150" Height="40"
TextWrapping="Wrap"
Text="{Binding ClassScore, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}"
BindingValidationError="txtBxScore_BindingValidationError"/>
i、将ValidatesOnExceptions属性设为True可以让绑定引擎在异常抛出时产生一个验证错误信息。
ii、将NotifyOnValidationError属性设为true可以通知绑定引擎当遇到验证错误时,触发BindingValidationError事件(即上面的BindingValidationError="txtBxClassName_BindingValidationError" )。
iii、对于BindingValidationError事件,可以为目标对象或者其父节点创建一个事件响应函数,来捕获该事件,从而对数据绑定出现异常的情况做出应对。
iv、BindingValidationError事件是一个路由事件,因此,不必让真正产生异常的那个对象处理BindingValidationError事件。BindingValidationError事件触发后将会向上冒泡传递,直至它被处理,所以可以在父节点上添加事件响应函数(在本例中,可以在存放TextBox控件的StackPanel控件中设置BindingValidationError相关事件)。
下面,开始我们的示例部分。
还是照常,先新建一个Silverlight应用程序命名为:SLValidation。
在此程序,我们将建立一个课程成绩输入界面,Page.xaml代码如下:
<UserControl x:Class="SLValidation.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="500" Height="300">
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<TextBlock Text="Silverlight数据验证示例" FontSize="20" TextAlignment="Center" Height="30" Foreground="Green" Margin="10"></TextBlock>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock Text="请输入课程名" FontSize="16" TextAlignment="Center" Height="30" Foreground="Blue"></TextBlock>
<TextBox x:Name="txtBxClassName" FontFamily="Georgia" FontSize="18" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10" Width="150" Height="40"
TextWrapping="Wrap" Text="{Binding ClassName, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}"
BindingValidationError="txtBxClassName_BindingValidationError" />
<TextBlock x:Name="tbClassNameMsg" Text="" Width="120" FontSize="12" TextAlignment="Center" Height="30" Foreground="Red" ></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock Text="请输入成绩值" FontSize="16" TextAlignment="Center" Height="30" Foreground="Blue"></TextBlock>
<TextBox x:Name="txtBxScore" FontFamily="Georgia" FontSize="18" HorizontalAlignment="Left"
VerticalAlignment="Bottom" Margin="10" Width="150" Height="40"
TextWrapping="Wrap"
Text="{Binding ClassScore, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}"
BindingValidationError="txtBxScore_BindingValidationError"/>
<TextBlock x:Name="tbClassScoreMsg" Text="" Width="120" FontSize="12" TextAlignment="Center" Height="30" Foreground="Red" ></TextBlock>
</StackPanel>
<Button x:Name="btnOK" Width="250" Height="50" Content="确定输入" FontSize="18" Foreground="Green" Click="btnOK_Click"></Button>
</StackPanel>
</Grid>
</UserControl>
界面如下图:
其功能是:
在课程文本框中输入课程名,如果此处为空,则报错,并把背景显示为红色。
在成绩文本框中输入成绩值 ,如果此处输入的整数在0和100范围之外,则报错,并把背景显示为红色。
1、前端界面的控件属性设置要求
注意,在界面代码中的两个TextBox控件的设置如下:
TextWrapping="Wrap" Text="{Binding ClassName, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}"
BindingValidationError="txtBxClassName_BindingValidationError" />
<TextBox x:Name="txtBxScore" FontFamily="Georgia" FontSize="18" HorizontalAlignment="Left"
VerticalAlignment="Bottom" Margin="10" Width="150" Height="40"
TextWrapping="Wrap"
Text="{Binding ClassScore, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}"
BindingValidationError="txtBxScore_BindingValidationError"/>
在它们的属性设置中,我们需要把ValidatesOnExceptions属性和NotifyOnValidationError属性设为True,并各自设置它们的BindingValidationError事件。此事件的具体操作在后台代码中实现。
并且,我们还需要把数据绑定的Mode设置为双向绑定 TwoWay,因为只有如此绑定才能实现绑定校验。
2、数据源定义的相关要求
然后创建我们将要实施数据绑定所用到的数据源类,命名为Score,代码如下:
注意:数据源类的定义说明如下:
i、它必须继承自INotifyPropertyChanged接口。
ii、在它的属性的Set代码段中需要定义如何进行校验以及在何种情况下抛出异常。
建立好界面和定义数据源后程序如下图:
3、后台代码的数据绑定及相关处理
Page.xaml.cs全部代码如下:
注意:我们需要在此处加入对数据绑定异常的处理代码即BindingValidationError事件代码。
在绑定出错的情况下,程序显示如下图:
(转载本文请注明出处)
转载于:https://www.cnblogs.com/wsdj-ITtech/archive/2009/08/31/1557004.html