MVVM и ошибки преобразования в WPF - объединение исключений ConvertBack из представления с ошибками проверки из модели? - PullRequest
4 голосов
/ 06 апреля 2011

Я разрабатываю приложение WPF с использованием шаблона MVVM, как описано Джошем Смитом в статье на http://msdn.microsoft.com/en-us/magazine/dd419663.aspx.

Я не могу найти хороший способ реагировать на ошибки Convert Back (например, когда пользователь вводит букву в текстовом поле, привязанном к двойному символу).

Джош Смит предлагает систему валидации, где Модель проверяет свои собственные значения и представляет логический результат через SomeModel.IsValid. Затем Джош использует значение IsValid в качестве предиката для определенных кнопок, например, кнопка Сохранить в форме - если форма не была заполнена правильно, IsValid имеет значение false и кнопка Сохранить отключена.

Этот метод работает очень хорошо. Однако, когда пользователь вводит значение в текстовое поле, которое не может быть преобразовано, возникает ошибка ConvertBack. Установщик ViewModel для свойства никогда не вызывается, и, следовательно, свойство Model никогда не обновляется. IsValid остается верным. Хотя представление реагирует на ошибку проверки, показывая сообщение об ошибке и выделяя ошибку (или любой другой параметр), кнопка «Сохранить» остается активной, поскольку свойство IsValid модели все еще имеет значение true, так как модель не была обновлена .

Есть ли пользователи MVVM, которые сталкивались с такой же проблемой? Есть идеи?

Одно из предположений состоит в том, что свойство модели может иметь значение Nullable. Затем конвертер должен установить для источника значение Null, если пользователь вводит неконвертируемую дату (например, буква в текстовом поле, привязанная к двойному значению). Однако я не мог найти простой способ сделать это - кажется, что требуется написание пользовательских конвертеров для каждого типа данных, для которого я требую функциональность, и для каждого числового формата, в котором я нуждаюсь. Это очень плохое решение для того, что кажется вызов дизайна.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Вас может заинтересовать BookLibrary пример приложения WPF Application Framework (WAF) .Он показывает, как исключения Parsing или ConvertBack обрабатываются как ошибки проверки.

Просто введите «abc» в текстовом поле «Страницы» и посмотрите, как ошибка проверки отображается в виде всплывающей подсказки, а кнопка «Сохранить» отключена.

1 голос
/ 06 апреля 2011

Я нашел две отличные статьи, посвященные этой проблеме:

Одна от Карла Шифлетта: http://karlshifflett.wordpress.com/mvvm/input-validation-ui-exceptions-model-validation-errors/

Одна от Джоша Смита:

http://joshsmithonwpf.wordpress.com/2008/11/14/using-a-viewmodel-to-provide-meaningful-validation-error-messages/

Это слишком сложно для дублирования, поэтому я просто отмечу ссылки как ответ.

...