zoukankan      html  css  js  c++  java
  • 关于Silverlight Input Data Validation <一>

    先说说基于INotifyPropertyChanged接口的数据验证。

    要点:

    1.NotifyOnValidationError和ValidatesOnExceptions在默认情况下是False的,所以,要想让验证失败的消息显示出来,请把它设置为True。

    2.请指定你所要验证地控件的DataContext。

    3.如果你想等验证通过时再做其他的事,用Validation.GetHasError()。

    以下是我的代码:

     (1)xaml部分:

    //对应上面的要点1
    <TextBox Text="{Binding Mode=TwoWay, Path=MyID, NotifyOnValidationError=True, ValidatesOnExceptions=True}" MaxLength="6" Name="txtMyID" Height="25"  Width="100" />
    

     (2)xaml.cs部分:

    public partial class MainPage : UserControl
    {
        public MainPage()
        {
           InitializeComponent();
             
          //对应上面的要点2
          MyPageValidation mv = new MyPageValidation();
          txtMyID.DataContext = mv;
        }
             
        private void btnClick_Click(object sender, RoutedEventArgs e)
        {
          //对应上面的要点3
          if(!Validation.GetHasError(this.txtMyID))
          {
          }
        }
    }
    

    (3)MyPageValidation验证类部分:

    public class MyPageValidation : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private string _MyID;
        int resultId;
        public string MyID
        {
            get
            {
               return _MyID;
            }
            set
            {
              if (value.Length == 0)
              {
                  throw new InvalidDataException("Please enter ID!");
              }
              if (!Int32.TryParse(value, out resultId))
              {
                  throw new InvalidDataException("Please enter Integer!");
              }
    
              _MyID = value;
              //如果我注释掉下面这段代码,验证照样正常执行
              //所以,我还没弄清楚这段代码的作用
              //知道的请告诉我,谢谢
              NotifyPropertyChanged("MyID");
             }
         }
    
         private void NotifyPropertyChanged(String propertyName)
         {
              if (PropertyChanged != null)
              {
                  PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
              }
         }
    }
    

     (4)我的自定义Exception部分:

    public class InvalidDataException : Exception
    {
         public InvalidDataException(string msg) : base(msg)
         {
         }
    }
    
  • 相关阅读:
    洛谷p1017 进制转换(2000noip提高组)
    Personal Training of RDC
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Peterhof.
    Asia Hong Kong Regional Contest 2019
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Siberia
    XVIII Open Cup named after E.V. Pankratiev. Ukrainian Grand Prix.
    XVIII Open Cup named after E.V. Pankratiev. GP of SPb
    卜题仓库
    2014 ACM-ICPC Vietnam National First Round
  • 原文地址:https://www.cnblogs.com/bobliu/p/1957290.html
Copyright © 2011-2022 走看看