5

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

如何在程序关闭/计算机关闭时通知我的视图(模型),以便它可以保存用户数据或询问是否应该保存这些数据?

在程序关闭时丢失数据绝对是要避免的,并且在用户的每一次按键上保存内容是没有意义的。

4

1 回答 1

8

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

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

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

我在我的 shell 中触发了关机命令,例如

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。这种模式可以扩展。

于 2010-12-16T09:50:27.757 回答