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

Silverlight开发历程-(数据验证),第1张

概述      Silverlight 支持基本的数据验证,在TwoWay双向绑定中可以验证你输入数据的合法性。         要验证数据,必须要将绑定对象上的ValidatesOnExceptions属性设置为True,NotifyOnValidationError属性设置为True。ValidatesOnExceptions的作用是通知绑定引擎在发生异常时创建验证错误。NotifyOnValid

      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开发历程-(数据验证)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1072763.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存