通知关闭程序的视图(模型)

时间:2010-12-16 09:36:55

标签: mvvm prism shutdown application-shutdown

所以我的prism / mvvm / mef程序运行良好,用户在应用程序中输入数据,然后关闭应用程序(或关闭计算机)。

如何通知我的View(模型)程序关闭/计算机关闭,这样可以保存用户数据,也可以询问是否应该保存这些数据?

关闭程序关闭的数据肯定是要避免的,并且在用户的每一个按键上保存东西是没有意义的。

1 个答案:

答案 0 :(得分:8)

我公开了客户可以注册的有趣全局“事件”的CompositeCommands,例如

public static class HostCommands
{
    private static readonly CompositeCommand Shutdown = new CompositeCommand();

    public static CompositeCommand ShutdownCommand
    {
        get { return Shutdown; }
    }
}

我在shell中触发shutdown命令,例如

public Shell()
{
    InitializeComponent();

    Closing += (sender, e) =>
    {
        if (HostCommands.ShutdownCommand.CanExecute(e))
            HostCommands.ShutdownCommand.Execute(e);
    };
}

客户可以注册如下,例如

public SomeViewModel(IEventAggregator eventService)
{
    //blah, blah, blah...

    HostCommands.ShutdownCommand.
        RegisterCommand(new DelegateCommand<object>(_ => Save()));
}

<强>更新

我不处理取消方案,但你可以通过传递给命令的对象来实现。例如,在上面的代码中,我传入一个客户可以操作的CancelEventArgs,即设置Cancel = true。在命令执行后我可以在我的Shell关闭事件处理程序中检查此值,以获取是否应该取消关闭shell。这种模式可以扩展。