Читаем Язык программирования C#9 и платформа .NET5 полностью

Переместите в новый базовый класс весь код, относящийся к INofityDataErrorInfo, из файла CarPartial.cs. Любые закрытые методы понадобится сделать защищенными. Удалите реализацию интерфейса INotifyDataErrorInfo из класса в файле CarPartial.cs и добавьте BaseEntity в качестве базового класса:

public partial class Car : BaseEntity, IDataErrorInfo

{

 // Для краткости код не показан.

}

Теперь любые создаваемые классы моделей будут наследовать весь связующий код INotifyDataErrorInfo.

<p id="AutBody_Root1281"><strong>Использование аннотаций данных в WPF</strong></p>

Для проверки достоверности в пользовательских интерфейсах инфраструктура WPF способна также задействовать аннотации данных. Давайте добавим несколько аннотаций данных к модели Car.

<p id="AutBody_Root1282"><strong>Добавление аннотаций данных к модели</strong></p>

Откройте файл Car.cs и поместите в него оператор using для пространства имен System.ComponentModel.DataAnnotations. Добавьте к свойствам Make, Color и PetName атрибуты [Required] и [StringLength(50)]. Атрибут [Required] определяет правило проверки достоверности, которое регламентирует, что значение свойства не должно быть null (надо сказать, оно избыточно для свойства Id, т.к. свойство не относится к типу int, допускающему null). Атрибут [StringLength(50)] определяет правило проверки достоверности, которое ограничивает длину значения свойства 50 символами.

<p id="AutBody_Root1283"><strong>Контроль ошибок проверки достоверности на основе аннотаций данных</strong></p>

В WPF вы должны программно контролировать наличие ошибок проверки достоверности на основе аннотаций данных. Двумя основными классами, отвечающими за проверку достоверности на основе аннотаций данных, являются ValidationContext и Validator. Класс ValidationContext предоставляет контекст для контроля за наличием ошибок проверки достоверности. Класс Validator позволяет проверять, есть ли в объекте ошибки, связанные с аннотациями данных, в ValidationContext.

Откройте файл BaseEntity.cs и добавьте в него следующие операторы using:

using System.ComponentModel;

using System.ComponentModel.DataAnnotations;

Далее создайте новый метод по имени GetErrorsFromAnnotations(). Это обобщенный метод, который принимает в качестве параметров строковое имя свойства и значение типа Т, а возвращает строковый массив. Он должен быть помечен как protected. Вот его сигнатура:

protected string[] GetErrorsFromAnnotations(

  string propertyName, T value)

{}

Внутри метода GetErrorsFromAnnotations() создайте переменную типа List, которая будет хранить результаты выполненных проверок достоверности, и объект ValidationContext с областью действия, ограниченной именем переданного методу свойства. Затем вызовите метод Validate.TryValidateProperty(), который возвращает значение bool. Если все проверки (на основе аннотаций данных) прошли успешно, тогда метод возвращает true. В противном случае он возвратит false и наполнит List информацией о возникших ошибках. Полный код выглядит так:

protected string[] GetErrorsFromAnnotations(

  string propertyName, T value)

{

  var results = new List();

  var vc = new ValidationContext(this, null, null)

    { MemberName = propertyName };

  var isValid = Validator.TryValidateProperty(

    value, vc, results);

  return (isValid)

    ? null

    : Array.ConvertAll(

        results.ToArray(), o => o.ErrorMessage);

}

Теперь можете модифицировать метод индексатора в файле CarPartial.cs, чтобы проверять наличие любых ошибок, основанных на аннотациях данных. Обнаруженные ошибки должны добавляться в коллекцию ошибок, поддерживаемую интерфейсом INotifyDataErrorInfo. Это позволяет привести в порядок обработку ошибок. В начале индексаторного метода очистите ошибки для столбца. Затем обработайте результаты проверок достоверности и в заключение предоставьте специальную логику для сущности. Ниже показан обновленный код индексатора:

public string this[string columnName]

{

  get

  {

    ClearErrors(columnName);

    var errorsFromAnnotations =

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных