Для тех, кто фактически говорит "нетривиальные преобразователи" в представлении, как вы справляетесь со следующим?
Допустим, у меня есть модель климатических датчиков, которая представляет временные ряды показаний различных приборов (барометр, гигрометр, термометр и т. Д.) В данном месте.
Допустим, моя модель представления предоставляет видимую коллекцию датчиков из моей модели.
У меня есть представление, содержащее инструментарий WPF DataGrid
, которое привязывается к модели представления со свойством ItemsSource
, установленным для наблюдаемой коллекции датчиков. Как мне представить вид каждого инструмента для данного датчика? При отображении небольшого графика (вспомните Edward Tufte sparkline здесь), который генерируется путем преобразования временного ряда в источник изображения с использованием преобразователя (TimeSeriesToSparklineConverter
)
Вот как я думаю о MVVM: Модель предоставляет данные для просмотра моделей. Модель представления предоставляет поведение, данные модели и состояние для просмотра. Представления выполняют визуальное представление данных модели и предоставляют интерфейс для поведения, согласующегося с состоянием модели представления.
Таким образом, я не верю, что искривленные изображения входят в модель (модель - это данные, а не конкретное визуальное представление их). Также я не верю, что спарклайн-изображения идут в модели представления (что, если мой вид хочет представить данные по-другому, скажем, в виде строки сетки, просто показывающей минимальное, максимальное, среднее, стандартное отклонение и т. Д. Серии?). Таким образом, мне кажется, что представление должно обрабатывать работу по преобразованию данных в желаемое представление.
Поэтому, если я хочу представить поведение, данные модели и заданное состояние для определенной модели представления в интерфейсе командной строки вместо графического интерфейса WPF, я не хочу, чтобы ни моя модель, ни моя модель представления содержали изображения. Это неправильно? Должны ли мы иметь SensorCollectionGUIViewModel
и SensorCollectionCommandLineViewModel
? Мне это кажется неправильным: я считаю модель представления абстрактным представлением представления, а не конкретным и привязанным к конкретной технологии, как предполагают эти имена.
Вот где я нахожусь в моем постоянно развивающемся понимании MVVM. Так что для тех, кто говорит не использовать конвертеры, что вы здесь делаете?