1. Нужно ли иметь новую ViewModel для каждого View? Если нет, то может ли создание единой MasterViewModel нарушать MVVM?
Не совсем. Вы можете иметь определенные ViewModel, которые соответствуют большому количеству представлений, каждое из которых отображает одни и те же данные в своем формате. Фактически, в этом и заключается главное обоснование MVVM - разделение отображения и бизнес-правил, так что формат отображения можно изменить путем загрузки различных представлений.
Вы также можете иметь один вид, который соответствует нескольким различным моделям представления. Это повторное использование кода в пользовательском интерфейсе дисплея.
2. Как ViewModels будут общаться друг с другом?
Обычно ViewModels взаимодействуют с Views через привязку WPF. Вот почему он называется MVVM, а не MVC.
ViewModels могут взаимодействовать друг с другом с помощью ряда стандартных средств .NET.
3. MainWindow.xaml.cs, где я объединяю все представления, должна иметь только инициализацию viewmodel и назначение DataContext, или я могу также добавить другие коды?
Вы обычно разделяете каждое представление в отдельный файл XAML. Это позволяет легко заменить другое представление для другого формата тех же данных.
Обычно рекомендуется разделять ваш код на автономные модули; то есть один просмотр одного файла, один просмотр модели одного файла.
4. У меня есть определенные EventHandlers. Должен ли я использовать их в ViewModel или вне модели-view-viewmodel?
События должны обрабатываться в представлениях, если они основаны исключительно на пользовательском интерфейсе (т. Е. Не имеют никакого отношения к данным).
Если событие должно повлиять на некоторые изменения в базовых данных (или выполнить какое-либо действие в отношении бизнес-правил), вы, в свою очередь, можете вызвать событие во ViewModel. Обратите внимание, что это событие в ViewModel может отличаться от события в View / UI.