【问题标题】:CompareAttribute for WPF?WPF的比较属性?
【发布时间】:2014-07-21 11:19:53
【问题描述】:

有谁知道 WPF 的 CompareAttribute 数据注释,或在 WPF 中实现相同结果的方法?

对于那些不立即知道的人,CompareAttribute 是用于在 WPF 中验证的属性数据注释,它为第二个属性接受一个字符串,如果修饰的属性和传递的属性匹配,则返回 true。

基本上我需要验证密码更改表单,以确保“重新输入的密码”与新密码匹配,并使用数据注释执行此操作,以便我可以使用 xaml 验证模板。

【问题讨论】:

    标签: c# wpf validation idataerrorinfo


    【解决方案1】:

    您可以通过创建自己的CustomValidationAttribute 描述的here 来创建自己的自定义验证逻辑。

    【讨论】:

    • 谢谢,我知道创建自定义验证的能力,但是我不确定如何将两个属性传递给验证器。
    【解决方案2】:

    试试这样的自定义验证器

        public class EqualsValidationAttribute : ValidationAttribute
    {
        string propertyToCompare;
        public EqualsValidationAttribute(string propertyToCompare)
        {
            this.propertyToCompare = propertyToCompare;
        }
    
        public EqualsValidationAttribute(string propertyToCompare,string errorMessage):this(propertyToCompare)
        {
            this.ErrorMessage = propertyToCompare;
        }
    
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var propInfo=validationContext.ObjectInstance.GetType().GetProperty(propertyToCompare);
            if (propInfo != null)
            {
                var propValue=propInfo.GetValue(validationContext.ObjectInstance);
                if(value!=null && propValue!=null && !string.IsNullOrEmpty(value.ToString()) && !string.IsNullOrEmpty(propValue.ToString()) //if either one is empty dont Validate
                    && (value.ToString() != propValue.ToString()))
                    return new ValidationResult(ErrorMessage);
            } 
            else
                throw new NullReferenceException("propertyToCompare must be the name of property to compare");
    
            return ValidationResult.Success;
        } 
    }
    

    并像这样在实体中使用它

        [Required(ErrorMessage="Password Required")]
        public string Password {
            get { return password; }
            set { password = value; RaisePropertyChanged("Password"); }
        }
    
        [EqualsValidationAttribute("Password", ErrorMessage = "Confirm password must be same as password")]
        public string ConfirmPassword {
            get { return confirmedpassword; }
            set { confirmedpassword = value; RaisePropertyChanged("ConfirmPassword"); }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多