项目需要引用DataAnnotations;
using System.ComponentModel.DataAnnotations;
在属性上声明Attribute
private string textContent;
[RequiredAttribute(ErrorMessage = "[用户名]不能为空")]
[StringLength(255, ErrorMessage = "[用户名]内容最大允许255个字符!")]
[RegularExpression("^[A-Za-z0-9]+$", ErrorMessage = "[用户名]只能输入字母、数字!")]
public string TextContent
{
get { return textContent; }
set { textContent = value; OnPropertyChanged("TextContent"); OnPropertyChanged("Error"); }
}
检测不合法的Attribute属性。首先获取类型中的所有属性,再遍历出不合法的Attribute
private readonly Dictionary<string, PropertyInfo> _propertyGetters = new Dictionary<string, PropertyInfo>();
private readonly Dictionary<string, ValidationAttribute[]> _validators = new Dictionary<string, ValidationAttribute[]>();
PropertyInfo[] properties = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo propertyInfo in properties)
{
object[] customAttributes = propertyInfo.GetCustomAttributes(typeof(ValidationAttribute), true);
if (customAttributes != null && customAttributes.Length > 0)
{
_validators.Add(propertyInfo.Name, customAttributes as ValidationAttribute[]);
_propertyGetters.Add(propertyInfo.Name, propertyInfo);
}
}
public string Error
{
get
{
IEnumerable<string> errors = from d in _validators
from v in d.Value
where !v.IsValid(_propertyGetters[d.Key].GetValue(this, null))
select v.ErrorMessage;
return string.Join(",", errors.ToArray());
}
}