所以我的prism / mvvm / mef程序运行良好,用户在应用程序中输入数据,然后关闭应用程序(或关闭计算机)。
如何通知我的View(模型)程序关闭/计算机关闭,这样可以保存用户数据,也可以询问是否应该保存这些数据?
关闭程序关闭的数据肯定是要避免的,并且在用户的每一个按键上保存东西是没有意义的。
答案 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。这种模式可以扩展。