所以我的 prism/mvvm/mef 程序运行良好,用户在应用程序中输入数据,然后关闭应用程序(或关闭计算机)。
如何在程序关闭/计算机关闭时通知我的视图(模型),以便它可以保存用户数据或询问是否应该保存这些数据?
在程序关闭时丢失数据绝对是要避免的,并且在用户的每一次按键上保存内容是没有意义的。
所以我的 prism/mvvm/mef 程序运行良好,用户在应用程序中输入数据,然后关闭应用程序(或关闭计算机)。
如何在程序关闭/计算机关闭时通知我的视图(模型),以便它可以保存用户数据或询问是否应该保存这些数据?
在程序关闭时丢失数据绝对是要避免的,并且在用户的每一次按键上保存内容是没有意义的。
我公开了客户可以为有趣的全局“事件”注册的 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。这种模式可以扩展。