Silverlight开发历程-(数据验证)

Silverlight 支持基本的数据验证,在TwoWay双向绑定中可以验证你输入数据的合法性。

要验证数据,必须要将绑定对象上的ValidatesOnExceptions属性设置为True,NotifyOnValidationError属性设置为True。ValidatesOnExceptions的作用是通知绑定引擎在发生异常时创建验证错误。NotifyOnValidationError属性的作用是在发生异常时引发BindingValidationError事件。

下面是代码,首先创建一个Book_Val类如下代码:

ublic class Book_Val : INotifyPropertyChanged { //book继承了INotifyPropertyChanged,实现了PropertyChanged事件,并对Price属性添加了监视 /// <summary> /// 标题 /// </summary> public string Title { get; set; } private double _price; /// <summary> /// 价格 /// </summary> public double Price { get { return _price; } set { if (value < 0) { throw new Exception("单价不能为负数,请重新输入!"); } _price = value; NotifyProperyChanged("Price"); } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyProperyChanged(string PropertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(PropertyName)); } } }


在XAML中把价格绑定到TextBox上

XAML:

<Grid x:Name="LayoutRoot" Background="White"> <Grid.RowDefinitions> <RowDefinition Height="50" /> <RowDefinition Height="50"/> <RowDefinition Height="50"/> <RowDefinition Height="70"/> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Grid.Row="0" Width="300"> <TextBlock FontSize="17" Text="书名:" Width="70" Margin="10,0,0,0" /> <TextBlock x:Name="txb_Title" FontSize="17" Text="{Binding Title,Mode=OneWay}" /> </StackPanel> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Grid.Row="1" Width="300"> <TextBlock FontSize="17" Text="单价:" Width="70" Margin="10,0,0,0" /> <TextBlock x:Name="txb_OldPrice" FontSize="17" Text="{Binding Price,Mode=TwoWay}" /> </StackPanel> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Grid.Row="2" Width="300"> <TextBlock FontSize="17" Text="新单价:" Width="70" Margin="10,0,0,0" /> <TextBox x:Name="txt_Price" Width="200" Text="{Binding Price,Mode=TwoWay,NotifyOnValidationError=True, ValidatesOnExceptions=True}" BindingValidationError="txt_Price_BindingValidationError" FontSize="17"/> </StackPanel> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Width="300" Grid.Row="3"> <Button x:Name="btn_Edit" Click="btn_Edit_Click" Content="修 改" FontSize="17" Width="100" /> </StackPanel> </Grid>


后台C#代码:

Book_Val book = new Book_Val(); public DataValidation() { InitializeComponent(); book.Title = "Silverlight开发历程!"; book.Price = 80; txb_Title.DataContext = book; txb_OldPrice.DataContext = book; txt_Price.DataContext = book; } private void txt_Price_BindingValidationError(object sender, ValidationErrorEventArgs e) { //修改txt_Price背景框的颜色 if (e.Action == ValidationErrorEventAction.Added) { txt_Price.Background = new SolidColorBrush(Colors.Red); } else if (e.Action == ValidationErrorEventAction.Removed) { txt_Price.Background = new SolidColorBrush(Colors.White); } } private void btn_Edit_Click(object sender, RoutedEventArgs e) { book.Price = Convert.ToDouble(txt_Price.Text); }


运行如结果:

出错的时候报错:

这个例子就完了,但是个人感觉不太好因为在调试环境下他总是会报出异常错误,即使在平常浏览状态下,他仍然会报出调试窗口,我也在网上找了资料,很多都是把调试功能

给去掉了,并没有从根本上解决这个问题,所以个人感觉这个验证直接throw出异常不太好,也许是我个人没有学习到位,希望朋友们如果知道其它更好的验证方法的话,请给我留言,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值