• Silverlight数据验证


    说明:本文出处:http://www.cnblogs.com/sydeveloper/archive/2012/09/03/2668073.html

    前台:

    <TextBox Name="tb1" Text="{Binding Name,Mode=TwoWay,ValidatesOnExceptions=True}" Height="100" Width="100"/>

    后台:

    Person p = new Person();
    
    public MainPage()
    {
        InitializeComponent();
        p.Name = "123";
        tb1.DataContext = p;
    }
    public class Person : INotifyPropertyChanged
    {
        private string name;
        public string Name
        {
            get { return name; }
            set
            {
                if (value.Length > 3)
                {
                    throw new Exception("不能超过三个字!");
                }
                name = value;
                NotifyChange("Name");
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyChange(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    

      

    2.验证TextBox内容不超过指定长度,不失去焦点验证。只需要在上例的基础上为TextBox添加TextChanged事件,并且在事件里通知数据源即可。

    private void tb1_TextChanged(object sender, TextChangedEventArgs e)

    {     System.Windows.Data.BindingExpression expresson = (sender as TextBox).GetBindingExpression(TextBox.TextProperty);     expresson.UpdateSource(); }

    对验证提示,可以进行样式的设置。

    前台添加NotifyOnValidationError属性和BindingValidationError事件

    <TextBox Name="tb1" Text="{Binding Name,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}" Height="100" Width="100" TextChanged="tb1_TextChanged" BindingValidationError="tb1_BindingValidationError"/>

    后台实现BindingValidationError事件

    View Code
     1 private void tb1_BindingValidationError(object sender, ValidationErrorEventArgs e)
     2 {
     3     if (e.Action == ValidationErrorEventAction.Added)
     4     {
     5         (sender as TextBox).Background = new SolidColorBrush(Colors.Red);
     6 
     7     }
     8     else if (e.Action == ValidationErrorEventAction.Removed)
     9     {
    10         (sender as TextBox).Background = new SolidColorBrush(Colors.White);
    11     }
    12 
    13 } 

    3.标注的方式验证。要添加System.ComponentModel.DataAnnotations.dll引用,并且将数据源的类定义修成为如下形式:

    View Code
     1 public class Person : INotifyPropertyChanged
     2 {
     3     private string name;
     4     [StringLength(3, ErrorMessage = "不能超过3个字,这是标注的方式验证!")]
     5     public string Name
     6     {
     7         get { return name; }
     8         set
     9         {
    10             Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Name" });
    11             name = value;
    12             NotifyChange("Name");
    13         }
    14     }
    15     public event PropertyChangedEventHandler PropertyChanged;
    16     private void NotifyChange(string propertyName)
    17     {
    18         if (PropertyChanged != null)
    19         {
    20             PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    21         }
    22     }
    23 
    24 } 
  • 相关阅读:
    Alone
    vue父组件中调用子组件的方法
    常用CSS的布局问题;
    Flex语法和常用鼠标手势
    如何解决浮动元素高度塌陷---CSS
    Vue中使用 iview 之-踩坑日记
    路由懒加载---Vue Router
    <input type="file">如何实现自定义样式
    sticky -- position定位属性sticky值之粘性定位;
    Vue组件传值(三)之 深层嵌套组件传值
  • 原文地址:https://www.cnblogs.com/zxbzl/p/2952703.html
Copyright © 2020-2023  润新知