使用Microsoft的Composite Application Guidance工具,似乎没有机制允许您查询模块 ViewModels并询问是否有任何未保存的数据。这是一个问题,因为我也对此感到内疚,当有未保存的数据时,您无法阻止应用程序终止...
我曾想过创建一个名为IApplicationEvents的接口,并在那里有一个名为ApplicationExiting的事件。想法是每个模块都可以订阅事件,并且在被触发时,可以发回“Cancel = true”或“Cancel = false”来说明是否允许应用程序退出。
很想知道其他人在这种情况下可能做了些什么,并了解社区中有哪些可能的解决方案来解决这个问题。
THX。
答案 0 :(得分:3)
这里有很多选择。
首先,我想澄清一点命名法......通常,您的模块程序集中包含的视图或ViewModel是未保存更改的内容,而不是模块本身。模块负责在初始化期间实例化所需的任何视图并在初始化期间返回shell,因此当您解决此问题时,您将需要关注视图/视图模型而不是模块类。 / p>
我头顶的选项:
采用像Caliburn 这样的免费框架,支持像这样的应用程序事件(以及一些MDI事件,如ViewClosing,那种事情)。它内置了对Prism(http://caliburn.codeplex.com/)
使用复合命令。您的视图或视图模型将在其他地方使用复合命令注册自己(CloseCommand,您为应用程序静态声明),并且每个打开的视图都会触发其CanExecute和Execute方法,以便您可以在关闭应用程序时投票并同时做出反应无论如何,它应该发生。 CompositeCommands是Prism的一个特性。 (见:Commanding Quickstart)
我认为那些可能是最优雅的。还有一些选择,但这些选项与现有惯例最为和谐。
希望这有帮助。