• Silverlight数据验证


    1.验证TextBox内容不超过指定长度,失去焦点后验证。

    前台:

    <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(thisnew 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事件

    private void tb1_BindingValidationError(object sender, ValidationErrorEventArgs e)
    {
        if (e.Action == ValidationErrorEventAction.Added)
        {
            (sender as TextBox).Background = new SolidColorBrush(Colors.Red);

        }
        else if (e.Action == ValidationErrorEventAction.Removed)
        {
            (sender as TextBox).Background = new SolidColorBrush(Colors.White);
        }

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

    public class Person : INotifyPropertyChanged
    {
        private string name;
        [StringLength(3, ErrorMessage = "不能超过3个字,这是标注的方式验证!")]
        public string Name
        {
            get { return name; }
            set
            {
                Validator.ValidateProperty(value, new ValidationContext(thisnullnull) { MemberName = "Name" });
                name = value;
                NotifyChange("Name");
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyChange(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(thisnew PropertyChangedEventArgs(propertyName));
            }
        }

  • 相关阅读:
    撩课-Web大前端每天5道面试题-Day15
    撩课-Web大前端每天5道面试题-Day14
    撩课-Java每天5道面试题第26天
    撩课-Java每天5道面试题第25天
    撩课-Web大前端每天5道面试题-Day13
    撩课-Java每天5道面试题第24天
    撩课-每天刷Web面试题(前10天汇总)-Day12
    撩课-Java每天5道面试题第23天
    撩课-Web大前端每天5道面试题-Day11
    java设计模式-策略模式
  • 原文地址:https://www.cnblogs.com/sydeveloper/p/2668073.html
Copyright © 2020-2023  润新知