Я разрабатываю приложение 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, если пользователь вводит неконвертируемую дату (например, буква в текстовом поле, привязанная к двойному значению). Однако я не мог найти простой способ сделать это - кажется, что требуется написание пользовательских конвертеров для каждого типа данных, для которого я требую функциональность, и для каждого числового формата, в котором я нуждаюсь. Это очень плохое решение для того, что кажется вызов дизайна.
Есть идеи?