赞助商
上一篇:SilverLight学习笔记--实际应用(一)(3):手把手建立一个Silverlight应用程序之删除记录

现在我们的程序有了添加和删除以及修改功能,下面我们看一看如何让程序具备数据校验功能。我们将用两种方式实现数据的校验,一种是在客户端进行同步校验。另一种是在服务器端进行异步校验。

  本篇我们先实现如何在客户端进行同步校验。基本原理是:利用数据的双向绑定和INotifyPropertyChanged 接口以及控件的NotifyOnValidationError与ValidatesOnExceptions两个属性设置来配合实现客户端同步校验。

现在继续修改完善我们的程序。

1、修改用户界面如下:
  1. <UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  x:Class="SLApplicationDataTest.Page"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.     Width="400" Height="300">
  5.     <StackPanel Height="500" Background="White">
  6.         <StackPanel Orientation="Horizontal">
  7.             <Button x:Name="addButton" Content="Add" Margin="10"/>
  8.             <Button x:Name="deleteButton" Content="Delete" Margin="10"/>
  9.         </StackPanel>
  10.         <data:DataGrid x:Name="dgPeople" AutoGenerateColumns="False" >
  11.             <data:DataGrid.Columns>
  12.                 <data:DataGridTextColumn    Header="Name"  Binding="{Binding Name}"  />
  13.                 <data:DataGridTextColumn    Header="Sex"  Binding="{Binding Sex}"  />
  14.                 <data:DataGridTemplateColumn Header="Age">
  15.                     <data:DataGridTemplateColumn.CellTemplate >
  16.                         <DataTemplate>
  17.                             <TextBlock  Text="{Binding Age}"  ToolTipService.ToolTip="请输入0至200之间的整数!"></TextBlock>
  18.                         </DataTemplate>
  19.                     </data:DataGridTemplateColumn.CellTemplate>
  20.                     <data:DataGridTemplateColumn.CellEditingTemplate>
  21.                         <DataTemplate>
  22.                             <TextBox Text="{Binding Age , Mode=TwoWay, NotifyOnValidationError=True,  ValidatesOnExceptions=True}" BindingValidationError="TextBox_BindingValidationError"
  23.                                     ToolTipService.ToolTip="请输入0至200之间的整数!"></TextBox>
  24.                         </DataTemplate>
  25.                     </data:DataGridTemplateColumn.CellEditingTemplate>
  26.                 </data:DataGridTemplateColumn>
  27.                 <data:DataGridTextColumn    Header="Address"  Binding="{Binding Address}"  />
  28.             </data:DataGrid.Columns>
  29.         </data:DataGrid>
  30.     </StackPanel>
  31. </UserControl>
复制代码
在此界面中,我们不再是简单地进行绑定数据和显示数据,而是对DataGrid控件进行了改造,尤其是运用了模板来定义我们的Age字段。注意Age字段的CellEditingTemplate模板,它的两个属性:NotifyOnValidationError,ValidatesOnExceptions都必须设置为true,这样才会在绑定出错时报错,而对错误事件的处理则字义在BindingValidationError事件中。
赞助商
赞助商
TOP