Использование DataAnnotations в проекте Windows Forms

Я недавно использовал ASP.Net MVC с DataAnnotations и думал использовать тот же подход для проекта Forms, но я не уверен, как это сделать.

Я установил свои атрибуты, но они, похоже, не проверяются при нажатии кнопки Сохранить.

обновление: я использовал подход Стива Сандерсона который будет проверять атрибуты моего класса и возвращать коллекцию ошибок, например:

        try
        {
            Business b = new Business();
            b.Name = "feds";
            b.Description = "DFdsS";
            b.CategoryID = 1;
            b.CountryID = 2;
            b.EMail = "SSDF";
            var errors = DataAnnotationsValidationRunner.GetErrors(b);
            if (errors.Any())
                throw new RulesException(errors);

            b.Save();
        }
        catch(Exception ex)
        {

        }

что вы думаете о такой подход?

3 ответов


пример Стива немного устарел (хотя все еще хорош). DataAnnotationsValidationRunner, который у него есть, может быть заменен системой.ComponentModel.DataAnnotations.Класс Validator теперь имеет статические методы проверки свойств и объектов, которые были украшены атрибутами DataAnnotations.


вот простой пример. предположим, у вас есть объект, подобный следующему

using System.ComponentModel.DataAnnotations;

public class Contact
{
    [Required(AllowEmptyStrings = false, ErrorMessage = "First name is required")]
    [StringLength(20, MinimumLength = 5, ErrorMessage = "First name must be between 5 and 20 characters")]
    public string FirstName { get; set; }

    public string LastName { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime Birthday { get; set; }
}

и пусть у нас есть метод, который создает экземпляр этого класса и пытается проверить его свойства, как показано ниже

    private void DoSomething()
    {
        Contact contact = new Contact { FirstName = "Armin", LastName = "Zia", Birthday = new DateTime(1988, 04, 20) };

        ValidationContext context = new ValidationContext(contact, null, null);
        IList<ValidationResult> errors = new List<ValidationResult>();

        if (!Validator.TryValidateObject(contact, context, errors,true))
        {
            foreach (ValidationResult result in errors)
                MessageBox.Show(result.ErrorMessage);
        }
        else
            MessageBox.Show("Validated");
    }

пространство имен DataAnnotations не привязано к MVC framework, поэтому его можно использовать в различных типах приложений. код выше возвращает true, попробуйте обновить значения свойств, чтобы получить ошибки проверки.

и сделать обязательно проверьте ссылку на MSDN: Пространство Имен DataAnnotations


Если вы используете новейшие версии Entity Framework, вы можете использовать этот cmd для получения списка ваших ошибок, если они существуют:

YourDbContext.Entity(YourEntity).GetValidationResult();