books-read.com
books-read.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

Наш ресурс дает возможность бесплатно читать книгу онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных . Сайт books-read.com дает возможность читать полную версию книги без регистрации и sms. Все книги онлайн, не надо качать fb2, epub, txt.
Добавить книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю в приложение ЧИТАТЬ КНИГУ ОФЛАЙН в приложении ios/android
Перейти на страницу:

Комбинирование IDataErrorInfo С INotifyDataErrorInfo для проверки достоверности

В предыдущем разделе было показано, что реализацию интерфейса

IDataErrorInfo
можно добавить к частичному классу, т.е. обновлять блоки
set
не понадобится. Кроме того, индексатор автоматически вызывается при возникновении события
PropertyChanged
в свойстве. Комбинирование
IDataErrorInfo
и
INotifyDataErrorInfo
предоставляет дополнительные возможности для проверки достоверности из
INotifyDataErrorInfo
, а также отделение от блоков
set
, обеспечиваемое
IDataErrorInfo
.

Цель применения

IDataErrorInfo
не в том, чтобы запускать проверку достоверности, а в том, чтобы гарантировать вызов кода проверки, который задействует
INotifyDataErrorInfo
, каждый раз, когда для объекта генерируется событие
PropertyChanged
. Поскольку интерфейс
IDataErrorInfo
не используется для проверки достоверности, необходимо всегда возвращать
string.Empty
из индексатора. Модифицируйте индексатор и вспомогательный метод
CheckMakeAndColor()
следующим образом:

public string this[string columnName]

{

  get

  {

    ClearErrors(columnName);

    switch (columnName)

    {

      case nameof(Id):

        break;

      case nameof(Make):

        CheckMakeAndColor();

        if (Make == "ModelT")

        {

          AddError(nameof(Make), "Too Old");

          hasError = true;

        }

        break;

      case nameof(Color):

        CheckMakeAndColor();

        break;

      case nameof(PetName):

        break;

    }

    return string.Empty;

  }

}

internal bool CheckMakeAndColor()

{

  if (Make == "Chevy" && Color == "Pink")

  {

    AddError(nameof(Make), $"{Make}'s don't come in {Color}");

  AddError(nameof(Color),

      $"{Make}'s don't come in {Color}");

    return true;

  }

  return false;

}

Запустите приложение, выберите автомобиль

Chevy
и измените цвет на
Pink
. В дополнение к декораторам красного цвета вокруг текстовых полей Make и Model будет также отображаться декоратор в виде красного прямоугольника, охватывающего целиком всю сетку, в которой находятся поля с детальной информацией об автомобиле (рис. 28.3).

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

Это еще одно преимущество применения интерфейса

INotifyDataErrorInfo
. В дополнение к элементам управления, которые содержат ошибки, элемент управления, определяющий контекст данных, также декорируется шаблоном отображения ошибки.

Отображение всех ошибок

Свойство

Errors
класса
Validation
возвращает все ошибки проверки достоверности для конкретного объекта в форме объектов
ValidationError
. Каждый объект
ValidationError
имеет свойство
ErrorContent
, которое содержит список сообщений об ошибках для свойства. Это означает, что сообщения об ошибках, которые нужно отобразить, находятся в списке внутри списка. Чтобы вывести их надлежащим образом, понадобится создать элемент
ListBox
, содержащий еще один элемент
ListBox
. Звучит слегка запутанно, но вскоре все прояснится.

Первым делом добавьте одну строку в

DetailsGrid
и удостоверьтесь в том, что значение свойства
Height
элемента
Window
составляет не менее
300
. Поместите в последнюю строку элемент управления
ListBox
и привяжите его свойство
ItemsSource
к
DetailsGrid
, используя
Validation.Errors
для
Path
:

<ListBox Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="2"

    ItemsSource="{Binding ElementName=DetailsGrid, Path=(Validation.Errors)}">

</ListBox>

Добавьте к

ListBox
элемент
DataTemplate
, а в него — элемент управления
ListBox
, привязанный к свойству
ErrorContent
. Контекстом данных для каждого элемента
ListBoxItem
в этом случае является объект
ValidationError
, так что устанавливать контекст данных не придется, а только путь. Установите путь привязки в
ErrorContent
:

<ListBox.ItemTemplate>

  <DataTemplate>

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

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - на сайте онлайн книг books-read.com Вы можете читать полные версии книг автора в одном месте.


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

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор books-read.com


Прокомментировать
Подтвердите что вы не робот:*