检测应用程序退出以及如何在未保存更改时停止

时间:2010-03-01 23:47:50

标签: wpf prism

使用Microsoft的Composite Application Guidance工具,似乎没有机制允许您查询模块 ViewModels并询问是否有任何未保存的数据。这是一个问题,因为我也对此感到内疚,当有未保存的数据时,您无法阻止应用程序终止...

我曾想过创建一个名为IApplicationEvents的接口,并在那里有一个名为ApplicationExiting的事件。想法是每个模块都可以订阅事件,并且在被触发时,可以发回“Cancel = true”或“Cancel = false”来说明是否允许应用程序退出。

很想知道其他人在这种情况下可能做了些什么,并了解社区中有哪些可能的解决方案来解决这个问题。

THX。

1 个答案:

答案 0 :(得分:3)

这里有很多选择。

首先,我想澄清一点命名法......通常,您的模块程序集中包含的视图或ViewModel是未保存更改的内容,而不是模块本身。模块负责在初始化期间实例化所需的任何视图并在初始化期间返回shell,因此当您解决此问题时,您将需要关注视图/视图模型而不是模块类。 / p>

我头顶的选项:

  1. 采用像Caliburn 这样的免费框架,支持像这样的应用程序事件(以及一些MDI事件,如ViewClosing,那种事情)。它内置了对Prism(http://caliburn.codeplex.com/

  2. 的支持
  3. 使用复合命令。您的视图或视图模型将在其他地方使用复合命令注册自己(CloseCommand,您为应用程序静态声明),并且每个打开的视图都会触发其CanExecute和Execute方法,以便您可以在关闭应用程序时投票并同时做出反应无论如何,它应该发生。 CompositeCommands是Prism的一个特性。 (见:Commanding Quickstart

  4. 我认为那些可能是最优雅的。还有一些选择,但这些选项与现有惯例最为和谐。

    希望这有帮助。