Первым делом добавьте одну строку в DetailsGrid
и удостоверьтесь в том, что значение свойства Height
элемента Window
составляет не менее 300
. Поместите в последнюю строку элемент управления ListBox
и привяжите его свойство ItemsSource
к DetailsGrid
, используя Validation.Errors
для Path
:
ItemsSource="{Binding ElementName=DetailsGrid, Path=(Validation.Errors)}">
Добавьте к ListBox
элемент DataTemplate
, а в него — элемент управления ListBox
, привязанный к свойству ErrorContent
. Контекстом данных для каждого элемента ListBoxItem
в этом случае является объект ValidationError
, так что устанавливать контекст данных не придется, а только путь. Установите путь привязки в ErrorContent
:
Запустите приложение, выберите автомобиль Chevy
и установите цвет в Pink
. В окне отобразятся ошибки (рис. 28.4).
Мы лишь слегка коснулись поверхности того, что можно делать при проверке достоверности и отображении сообщений об ошибках, но представленных сведений должно быть вполне достаточно для выработки вами способа разработки информативных пользовательских интерфейсов, которые улучшают восприятие.
Перемещение поддерживающего кода в базовый класс
Вероятно, вы заметили, что в настоящий момент в классе 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;
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT