Вот мое мнение, за что оно стоит:
Я не совсем согласен с подходом, который вы предлагаете (за исключением глупого представления). В реальной жизни вам часто приходится использовать существующую модель: это может быть устаревший код, который у вас нет времени (или воли) для изменения, или даже библиотека, для которой у вас нет кода. На мой взгляд, модель должна полностью не знать, как она будет отображаться, и ее легко использовать в приложении, не поддерживающем WPF. Поэтому он не должен реализовывать какой-либо конкретный интерфейс, такой как INotifyPropertyChanged
из INotifyCollectionChanged
, чтобы сделать его пригодным для использования в MVVM. Я думаю, что вся логика, связанная с пользовательским интерфейсом, должна находиться во ViewModel.
Что касается RoutedEvents
и RoutedCommands
, они не очень подходят для использования с шаблоном MVVM. Я обычно стараюсь использовать как можно меньше RoutedEvents
, а не RoutedCommands
вообще. Вместо этого мои ViewModels предоставляют RelayCommand
свойства, которые я связываю с пользовательским интерфейсом в XAML (подробности о RelayCommand
см. В этой статье Джоша Смита). Когда мне действительно нужно обрабатывать события для некоторого элемента управления, я использую прикрепленное поведение, чтобы сопоставить события командам ViewModel (взгляните на реализацию Марлона Греча )
Итак, в итоге:
- тупой вид
- Большой и умный ViewModel
- Любая модель, которую вы хотите или должны использовать
Конечно, это только мой подход, и он может быть не лучшим, но я чувствую себя вполне комфортно с ним;)