有没有人知道WPF的CompareAttribute数据注释,或者在WPF中实现相同结果的方法?
对于那些不能立即知道的人,CompareAttribute是一个用于在WPF中验证的属性数据注释,它为第二个属性接受一个字符串,如果装饰属性和传递的属性匹配,则返回true。
基本上我需要验证密码更改表单,以确保“重新输入的密码”与新密码匹配,并使用数据注释执行此操作,以便我可以使用xaml验证模板。
答案 0 :(得分:0)
您可以创建自己的CustomValidationAttribute
描述here来创建自己的自定义验证逻辑。
答案 1 :(得分:0)
尝试像这样的自定义验证器
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"); }
}
}