代码之家  ›  专栏  ›  技术社区  ›  Richard B

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

  •  2
  • Richard B  · 技术社区  · 15 年前

    使用来自Microsoft的复合应用程序指导工具,似乎没有任何机制允许您查询 模块 查看模型并询问其中是否有未保存的数据。这是一个问题,因为,我也对此感到内疚,当存在未保存的数据时,您不能阻止应用程序终止…

    我曾经考虑过创建一个名为IApplicationEvents的接口,并在上面有一个名为ApplicationExisting的事件。每个模块都可以订阅事件,当被激发时,可以返回“cancel=true”或“cancel=false”,以说明是否允许应用程序退出。

    想知道其他人在这种情况下做了什么,想知道社区里有什么可能的解决办法来解决这个问题。

    谢谢。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Anderson Imes    15 年前

    这里有很多选择。

    首先,我想澄清一些术语…通常你的 模块程序集中包含的视图或视图模型是具有未保存更改的内容,而不是模块本身。 . 模块负责在开始时实例化任何必要的视图,并在初始化期间对shell作出贡献,这通常就是它,因此当您解决此问题时,您将希望关注您的视图/视图模型,而不是模块类。

    我头上的选择:

    1. 采用像Caliburn这样的免费框架 它支持类似这样的应用程序事件(以及一些MDI事件,比如viewClosing,诸如此类)。它有内置棱镜支架( http://caliburn.codeplex.com/ )

    2. 使用复合命令 . 您的视图或视图模型将在其他地方注册一个复合命令(closecommand,您为应用程序静态声明),并且每个打开的视图都将激发其can execute和execute方法,以便您在应用程序关闭时都能投票,并且在任何情况下都能对其作出反应。复合命令是棱镜的一个特征。(见: Commanding Quickstart )

    我觉得这些可能是最优雅的。还有更多的选择,但这些选择与现有的惯例最为协调。

    希望这有帮助。