Как использовать валидаторы аннотации данных в Winforms?

Мне нравится блок приложения Validation из корпоративной библиотеки :-)
Теперь я хотел бы использовать DataAnnotations в Winforms, поскольку мы также используем динамические данные asp.net. Чтобы у нас были общие технологии для всей компании.
А также аннотации к данным должны быть проще в использовании.

Как я могу сделать что-то подобное в Winforms, например Стивен Уолтер делал в asp.net MVC?


person Peter Gfader    schedule 16.12.2008    source источник


Ответы (1)


Я адаптировал решение, найденное на http://blog.codeville.net/category/validation/page/2/

public class DataValidator
    {
    public class ErrorInfo
    {
        public ErrorInfo(string property, string message)
        {
            this.Property = property;
            this.Message = message;
        }

        public string Message;
        public string Property;
    }

    public static IEnumerable<ErrorInfo> Validate(object instance)
    {
        return from prop in instance.GetType().GetProperties()
               from attribute in prop.GetCustomAttributes(typeof(ValidationAttribute), true).OfType<ValidationAttribute>()
               where !attribute.IsValid(prop.GetValue(instance, null))
               select new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty));
    }
}

Это позволит вам использовать следующий код для проверки любого объекта, используя следующий синтаксис:

var errors = DataValidator.Validate(obj);

if (errors.Any()) throw new ValidationException();
person Matt Murrell    schedule 04.03.2009
comment
Я люблю это. Придется попробовать, но похоже, что он выполняет свою работу ... Ручной вызов Validate () не так хорош, но мы могли бы этого избежать, реализовав это в наших UserControls. - person Peter Gfader; 05.03.2009
comment
Можно ли заменить Validate () на System.ComponentModel.DataAnnotations.Validator? - person Rolf Kristensen; 14.06.2011
comment
@Rolf: только в Silverlight или .Net 4+ - person Darbio; 15.02.2012