1.是否有必要为每个 View 都有一个新的 ViewModel?如果不是,那么创建单个 MasterViewModel 是否违反了 MVVM?
不是真的。您可以拥有与大量视图相对应的特定视图模型,每个视图以不同的格式显示相同的数据。事实上,这首先是 MVVM 的全部基本原理——显示和业务规则的分离,以便可以通过加载不同的视图来更改显示格式。
您还可以拥有一个对应于多个不同 ViewModel 的 View。这是显示 UI 上的代码重用。
2. ViewModel 将如何相互通信?
通常 ViewModels 通过 WPF Binding 与 Views 通信。这就是为什么它被称为 MVVM 而不是 MVC。
ViewModel 可以通过多种标准 .NET 方式相互通信。
3.我正在集成所有视图的 MainWindow.xaml.cs 应该只有 viewmodel 的初始化并在那里分配 DataContext 或者我也可以放置其他代码?
您通常将每个视图分隔到一个单独的 XAML 文件中。这使得用另一个视图替换相同数据的不同格式变得很容易。
通常,建议将您的代码分成独立的模块;即一个视图一个文件,一个视图模型一个文件。
4.我有我定义的事件处理程序。我应该在 ViewModel 中还是在 model-view-viewmodel 之外使用它们?
如果事件是纯 UI 驱动的(即与数据无关),则应在视图中处理事件。
如果某个事件应该影响底层数据的某些更改(或对业务规则执行某些操作),您可以反过来在 ViewModel 上引发一个事件。请注意,ViewModel 上的此事件可能与 View/UI 上的事件不同。