Подобные вещи могут быть весьма субъективными, но помните, что ViewModel - это модель вида, включая настройки того, как вид отображается. У меня есть кнопки и т. Д., Которые подключаются к ICommands в ViewModel (для примера google для DelegateCommand или RelayCommand), а не к командам в View. Моя ViewModel затем обновляет свое состояние по мере необходимости, и представление реагирует на события. Нажатие кнопок циклически повторяет ViewModel, даже если виртуальная машина не делает ничего, кроме запуска событий, для которых View отвечает (и обрабатывает исключения, ведение журнала и т. Д. Для события).
Для сложного поведения в представлении, которое не влияет на данные, с которыми оно работает, тогда, конечно, целесообразно обрабатывать события в выделенном фрагменте кода, хотя я обычно нахожу, что это имеет место в пользовательских элементах управления, а не в окнах и т.д. *