首页 / 软件开发 / Silverlight / Silverlight3系列(六)数据验证 Data Validation
Silverlight3系列(六)数据验证 Data Validation2010-11-12 博客园 virus本篇我们讨论SL3中的数据验证相关知识。数据验证只会发生双向绑定的情况下,因为实体类需要实现INotifyPropertyChanged接口。在SL中数据绑定的时候如果遇到没有验证的数据,通常会忽略它。下面的表中,列出在双向绑定的时候,三种类型的错误:1、不正确的数据。例如:本来是应该数字类型的,不应该输入字符或者其他字符,同时,也不能超出最大值。2、对象属性的set异常。例如:在属性Id的set中有一个判断,如果有问题就抛出异常。3、只读属性,你不能进行赋值操作。如果是上面的错误,你不能忽略他们,因为sl的数据绑定不会给你任何可视化的提示信息。不正确的值保留在绑定控件中,但是没有应用到绑定对象中。避免这个问题的好办法就是及时的提醒用户,输入有问题。最容易的途径包括:使用绑定对象的两个属性,ValidatesOnExceptions、NotifyOnValidationError,这些都会激活sl的错误提醒事件。1、ValidatesOnExceptionValidatesOnException是实现其他验证的第一步。在你设置ValidatesOnException=true之后,数据绑定将会对任何错误做出响应,不管它是出现在类型转换还是属性的setter。但是,当设置ValidatesOnException=false(默认为 false)之后,数据绑定不会提示任何错误。绑定对象没有被更新,错误的值保留在了绑定控件中。下面是绑定控件的设置例子<TextBox x:Name="customerId" Grid.Column="1" Grid.Row="1" Text="{Binding CustomerId, Mode=TwoWay, ValidatesOnExceptions=true}"></TextBox>
这样设置之后,你的控件在双向绑定之后可以进行捕获和显示错误的能力,具有这种能力的控件包括。* TextBox* PasswordBox* CheckBox* RadioButton* ListBox* ComboBox知识点:验证状态ValidationState包括三种:Valid、InvalidUnfocused、InvalidFocused。这里我们再一个属性的setter中添加验证,代码public virtual int CustomerId
{
get { return this._intCustomerId; }
set
{
int result;
if (Int32.TryParse(value.ToString(), out result) == false)
throw new ArgumentException("必须是数字");
this._intCustomerId = result;
OnPropertyChanged("CustomerId");
}
}