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" /> <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" /> <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" /> <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出异常不太好,也许是我个人没有学习到位,希望朋友们如果知道其它更好的验证方法的话,请给我留言,谢谢。
总结以上是内存溢出为你收集整理的Silverlight开发历程-(数据验证)全部内容,希望文章能够帮你解决Silverlight开发历程-(数据验证)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)