zoukankan      html  css  js  c++  java
  • 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));
            }
        }

  • 相关阅读:
    死磕 java线程系列之自己动手写一个线程池(续)
    Spring Boot (十): Spring Boot Admin 监控 Spring Boot 应用
    opencv之为图像添加边界
    协作,才能更好的中断线程
    Java并发——线程池Executor框架
    神经网络dropout
    xgboost
    物体检测-毕业设计项目回顾
    计算机网络-TCP连接
    gbdt推导和代码
  • 原文地址:https://www.cnblogs.com/sydeveloper/p/2668073.html
Copyright © 2011-2022 走看看