Но теперь я начинаю путаться, потому что в большинстве примеров MVVM, которые я вижу, модель обернута в ViewModel.
Какой здесь хороший подход?
Если каждый из ваших элементов данных (модель) является тривиальным, и то, как вы используете их в представлении, также тривиально, то нет никакой проблемы с отображением их «как есть» из ViewModel (создание дополнительной работы простопотому что это никогда не хорошая идея).С другой стороны, если вы обнаружите, что вам нужна функциональность, которую не так просто реализовать, это может указывать на то, что вам нужно обернуть каждую модель в ее собственную модель представления (ItemTypeViewModel
).
Примеркогда вам может не понадобиться, ViewModel отображает элементы в списке только для чтения, и в этом случае вам будет хорошо использовать DataTemplate
и ничего более.Контрпример будет, если вам нужно отредактировать их, и изменения должны быть проверены;Затем ViewModel будет содержать логику проверки.
Подводя итог: не сходите с ума с MVVM, если для этого нет причин.Будьте практичны.
Последнее замечание о том, что ViewModel имеет доступ к представлению:
В этом нет проблем, если вы не используете открытый интерфейс среды выполнения представления.type. Фактически, MVMM-first-ViewModel требует , чтобы ViewModel имела ссылку на View.Многие люди скажут вам, что это автоматическая ошибка - они ошибочны , и, вероятно, под влиянием того факта, что View-first (разновидность MVVM, встречающаяся в большинстве примеров) не имеет ViewModelссылка на представление.
Если для представления все в порядке, если ссылка имеет вид ViewModel в качестве DataContext
, то также можно использовать и обратное.Важным моментом является то, как используется эта ссылка: public object View { get; set; }
, конечно, хорошо , потому что она не вводит никакой связи ;но public MyUserControl View { get; set; }
нет, потому что он связывает ViewModel с конкретным типом MyUserControl
.