public ValidatableViewModel()
{
var props = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
_validationAttributeDictionary = new Dictionary<PropertyInfo, List<IValidationItem>>();
foreach (var property in props)
{
var validationItems = new List<IValidationItem>();
var attributes =
property.GetCustomAttributes(typeof(ValidationAttribute), true)
.Cast<ValidationAttribute>()
.ToList();
var propertyName = property.Name;
if (attributes.Count > 0)
{
validationItems.AddRange(
attributes.Select(
attribute => new AttributeValidationItem(attribute, propertyName) as IValidationItem));
}
var methodName = string.Format("Validate{0}", propertyName);
var validationMethod = GetType()
.GetMethod(methodName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null,
new[] {property.PropertyType}, new ParameterModifier[] {});
if (validationMethod != null)
{
validationItems.Add(new MethodValidationItem(validationMethod));
}
if (validationItems.Count > 0)
{
_validationAttributeDictionary.Add(property, validationItems);
}
}
}