Когда вызывать метод AddError IDataErrorInfo - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть класс ViewModel, который реализует интерфейс IDataErrorInfo .

В каждом свойстве установлено Я проверяю переданное значение, и если проверка не проходит, я вызываю метод с именем AddError для добавить ошибку для свойства. Метод AddError добавляет элемент в базовый тип данных, который я использую для управления ошибками (Словарь (Of String, List (Of String))).

В настоящее время все работает хорошо во время ввода данных. Если пользователь вводит недопустимые значения для свойства, FrameworkElement, который используется для ввода данных, выделяется с помощью всплывающей подсказки, для которой установлено сообщение об ошибке.

Теперь вот моя проблема.

Скажем, мой объект содержит недопустимые поля с самого начала .... Например, если у меня есть класс Person с обязательным полем «Имя», и я создаю новый экземпляр класса Person. Поле имени не будет выделено как «ошибка», так как метод свойства Name set еще не был вызван.

Итак, я включил проверку в свойства, а также .

Кажется, это работает, но ...... это похоже на взлом. И некоторая проверка свойства должна быть сделана моделью (в отличие от ViewModel, с которым я работаю). Модель выдает соответствующее сообщение об ошибке, которое должно быть установлено, но я не могу получить сообщение об ошибке, пока не установлю свойство модели.

Буду очень признателен за любой совет о наилучшем подходе к реализации интерфейса IDataErrorInfo.

Спасибо!

-Frinny

1 Ответ

0 голосов
/ 18 февраля 2011

Я понял что-то, что не похоже на хак.

Я также, вероятно, должен был упомянуть, что у меня есть базовый класс, от которого наследуются все мои ViewModel.Именно в этом базовом классе я реализую интерфейс IDataErrorInfo.

В итоге я добавил новый метод MustOverride в базовый класс ViewModel под названием «Validate», который проверяет имя свойства, предоставленное ему.Если проверка завершается неудачей, она добавляет запись в мой основной словарь ошибок.

Я вызываю метод validate в свойстве Item (которое реализует свойство IDataErrorInfo.Item).

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

Если это не лучший подход, пожалуйста, дайте мне знать.

-Frinny

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...