zoukankan      html  css  js  c++  java
  • 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出异常不太好,也许是我个人没有学习到位,希望朋友们如果知道其它更好的验证方法的话,请给我留言,谢谢。

  • 相关阅读:
    ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考
    ASP.NET Core 中文文档 第四章 MVC(3.1)视图概述
    ASP.NET Core 中文文档 第四章 MVC(2.3)格式化响应数据
    ASP.NET Core 中文文档 第四章 MVC(2.2)模型验证
    ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定
    ASP.NET Core 中文文档 第四章 MVC(01)ASP.NET Core MVC 概览
    mysql 解除正在死锁的状态
    基于原生JS的jsonp方法的实现
    HTML 如何显示英文单、双引号
    win2008 r2 服务器php+mysql+sqlserver2008运行环境配置(从安装、优化、安全等)
  • 原文地址:https://www.cnblogs.com/raphael5200/p/5114907.html
Copyright © 2011-2022 走看看