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