Мы только начинаем знакомство с MVVM в WPF.
Мы реализовали наши модели представления со «строго типизированными» свойствами (int, double и т. Д.), К которым мы привязываемся в представлении.
Преобразование типов в основном работает нормально, поэтому ввод данных достаточно прост. Но мы сталкиваемся с проблемами с проверкой.
Если, скажем, нечисловое значение вводится в текстовое поле, привязанное к числовому свойству, преобразование завершается ошибкой, свойство никогда не устанавливается, и мы никогда не получаем возможности предоставить пользователю надлежащую обратную связь. Хуже того, свойство сохраняет свое текущее значение, что приводит к несоответствию между тем, что отображается в представлении, и тем, что на самом деле находится в ViewModel.
Я знаю, что со всем этим можно справиться с помощью преобразователей стоимости. Но я встречал несколько мнений о том, что конверсия вообще не должна быть обязанностью представления. В представление вводятся строки, а преобразование, проверка и т. Д. Должны лежать в сфере ответственности ViewModel (так следует аргумент).
Если это так, мы должны переписать большинство свойств в наших ViewModels в строку и предоставить информацию об ошибках, например, через интерфейс IErrorInfo. Это, несомненно, сделало бы представление XAML более простым и компактным. С другой стороны, преобразование, проверка и т. Д. Будут менее декларативными, явными и гибкими с точки зрения дизайнера представлений.
Нам кажется, что эти два подхода принципиально разные, поэтому, прежде чем мы решим, мы хотели бы получить некоторые информированные мнения SO по этому поводу.
Итак: должны ли ViewModels предоставлять упрощенный, «текстовый» интерфейс для представления и обрабатывать преобразование внутренне? Или свойства ViewModel должны раскрывать фактические типы данных, оставляя такую рутинную работу представлению для обработки?
Обновление:
Здесь сложно выбрать победителя, но в конце концов я остановился на одном из вас, который пришел к выводу более или менее похожим на меня.
В частности, мы решили оставить свойства ViewModel типизированными. Основная причина этого - гибкость, которую он дает нам при разработке представления, и возможности явного декларативного преобразования / форматирования в XAML.
Я заметил, что у вас есть предположение, что вы не согласны с нами в этом вопросе, что дизайн представления фиксирован и готов. Следовательно, в представлении не нужно принимать никаких решений о преобразовании, форматировании и т. Д. Но наш процесс - это гибкий процесс, и у нас нет заранее продуманных до мельчайших деталей пользовательского интерфейса.
На самом деле, если детали пользовательского интерфейса дорабатывается в процессе, остается место для творчества, и, кроме того, на мой взгляд, даже тщательно проработанный дизайн всегда будет трансформироваться в процессе реализации.
Суть всего в том, что, хотя соблюдение бизнес-правил, безусловно, относится к ViewModel, нам кажется, что простое преобразование и форматирование - это элемент представления. Это может звучать как ересь, но я на самом деле не думаю, что преобразование типов в представлении вообще требует модульного тестирования (пока мы проводим модульное тестирование реальных преобразователей типов).
В общем, отличное обсуждение, ребята, с хорошо сформулированными, информированными мнениями. Спасибо.