Связано с комментарием выше Энрико. ViewModels не должен быть тесно связан с представлениями, это должно быть наоборот. Представления должны быть слабо связаны с ViewModels. ViewModel не должен знать о представлении, это позволяет вам легко выполнить модульное тестирование ViewModel. Все взаимодействия между представлениями с ViewModel должны реализовываться через свойства в ViewModel (свойства ICommand для действий и другие свойства для привязки данных).
Единственное, что верно, так это то, что ViewModel тесно связан с Моделью, поэтому использование описанных выше обобщений обеспечивает большую расширяемость. Это шаблон, который я бы порекомендовал.
Предоставляя класс ViewModel, который в основном просто предоставляет свойства, он должен позволить вам перенести это в любую среду представления и использовать весь код, который вы использовали ранее. Другими словами, при правильной реализации вы можете поместить свою сборку ViewModels в приложение ASP.NET MVC и привязать представление к свойствам без изменения кода.
Хорошая статья об основах MVVM: эта.
Я действительно думаю, что MVVM - лучшая вещь для разработки пользовательского интерфейса. Очевидно, что мы не можем все использовать его, потому что это требует создания приложения с нуля, используя подход MVVM, но когда вы создаете новое приложение, это не проблема.
Единственный недостаток, который я имею с ICommand, заключается в том, что он находится в сборке PresentationCore, которая в основном предназначена для WPF. Если Microsoft хочет слабой связи, она должна быть в другой сборке.