Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

Перемещение поддерживающего кода в базовый класс

Вероятно, вы заметили, что в настоящий момент в классе

CarPartial
присутствует много кода. Поскольку в рассматриваемом примере есть только один класс модели, проблемы не возникают. Но по мере появления новых моделей в реальном приложении добавлять весь связующий код в каждый частичный класс для моделей нежелательно. Гораздо эффективнее поместить поддерживающий код в базовый класс, что и будет сделано.

Создайте в папке

Models
новый файл класса по имени
BaseEntity.cs
. Добавьте в него операторы
using
для пространств имен
System.Collections
и
System.ComponentModel
. Пометьте класс как открытый и обеспечьте реализацию им интерфейса
INotifyDataErrorInfor
.

using System;

using System.Collections;

using System.Collections.Generic;

using System.ComponentModel;

using System.Linq;

namespace Validations.Models

{

public class BaseEntity : INotifyDataErrorInfo

}

Переместите в новый базовый класс весь код, относящийся к

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

public partial class Car : BaseEntity, IDataErrorInfo

{

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

}

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

INotifyDataErrorInfo
.

Использование аннотаций данных в WPF

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

Car
.

Добавление аннотаций данных к модели

Откройте файл

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

Контроль ошибок проверки достоверности на основе аннотаций данных

В WPF вы должны программно контролировать наличие ошибок проверки достоверности на основе аннотаций данных.

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

Откройте файл

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

using System.ComponentModel;

using System.ComponentModel.DataAnnotations;

Далее создайте новый метод по имени

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

protected string[] GetErrorsFromAnnotations<T>(

string propertyName, T value)

{}

Внутри метода

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

protected string[] GetErrorsFromAnnotations<T>(

string propertyName, T value)

{

var results = new List<ValidationResult>;

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
. Это позволяет привести в порядок обработку ошибок. В начале индексаторного метода очистите ошибки для столбца. Затем обработайте результаты проверок достоверности и в заключение предоставьте специальную логику для сущности. Ниже показан обновленный код индексатора:

Поделиться:
Популярные книги

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Помещица Бедная Лиза

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Помещица Бедная Лиза

Бальмануг. Студентка

Лашина Полина
2. Мир Десяти
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Бальмануг. Студентка

Изменить нельзя простить

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Изменить нельзя простить

Газлайтер. Том 3

Володин Григорий
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 3

Жандарм 4

Семин Никита
4. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 4

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

Отмороженный 6.0

Гарцевич Евгений Александрович
6. Отмороженный
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Отмороженный 6.0

Пипец Котенку!

Майерс Александр
1. РОС: Пипец Котенку!
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Пипец Котенку!

АН (цикл 11 книг)

Тарс Элиан
Аномальный наследник
Фантастика:
фэнтези
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
АН (цикл 11 книг)

Толян и его команда

Иванов Дмитрий
6. Девяностые
Фантастика:
попаданцы
альтернативная история
7.17
рейтинг книги
Толян и его команда

Пятое правило дворянина

Герда Александр
5. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Пятое правило дворянина

Игрок, забравшийся на вершину. Том 8

Михалек Дмитрий Владимирович
8. Игрок, забравшийся на вершину
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Игрок, забравшийся на вершину. Том 8

Возвышение Меркурия. Книга 7

Кронос Александр
7. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 7