我开始研究 MVVM 并像许多其他人一样面对某种误解。在网络上提供的众多 MVVM 实现示例中,作者以不同的方式接近应用程序的入口点(我可能在定义上有误)。有些更改了 StartupUri属性,有些只是完全删除它并在App.xaml.cs文件的重载 OnStartup 方法中手动实例化窗口并设置其DataContext属性。我在网上找到了几个关于 MVVM 和 mvvm-light 的示例(示例 1、示例 1、示例 3、示例 4和示例 5) 并且在其中作者根本没有更改App.xaml或App.xaml.cs,只有其中一个更改了代码隐藏(不理解它在俄语中的调用方式)表示。
我很清楚,与任何模式一样,MVVM 是一种建议,并不禁止在合理范围内偏离规则,但这些方法之间有什么区别?有什么好处和缺陷?哪种方法可以让您更灵活地进一步扩展和维护应用程序(插件、扩展等)?
我不喜欢使用
StartupUri,而是覆盖OnStartup,并在那里创建主窗口([1]、[2]、[3])。原因是提示
StartupUri不允许你DataContext在窗口外设置。DataContext在 XAML 中硬编码 'a 是错误的,因为:OnStartup.App,它可以保留对它的引用,以便其他人(例如,侧窗)可以附加到同一个 VM 实例。否则,您将不得不爬到主 VM 后面进入主窗口实例。无论如何,MVVM 不是教条,做对你来说更方便的事情。