我有一个使用Prism的WPF / MVVM应用程序。当用户进行一些更改并在应用程序中有一些未保存的东西时。然后,使用此未保存的更改,用户注销或关闭应用程序
发生这种情况时,我希望应用程序停止注销/关闭并要求用户进行保存。
对于WinForm应用程序,我认为使用FormClosing事件可以解决问题。 WPF应用程序的解决方案是什么?
我正在研究几种解决方案,并将在明天发布。到那时,欢迎任何建议。
答案 0 :(得分:1)
我使用Prism的CompositePresentationEvent。 Shell会在想要关闭时发布事件,并且可能希望请求保存更改的视图模型并取消关闭,订阅事件
public class ApplicationClosingEvent : CompositePresentationEvent<CancelEventArgs> { }
在Shell.xaml.cs中。 _eventAggregator是一个IEventAggregator:
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
_eventAggregator.GetEvent<ApplicationClosingEvent>().Publish(e);
base.OnClosing(e);
}
在vm构造函数中:
_eventAggregator.GetEvent<ApplicationClosingEvent>().Subscribe(OnApplicationClosing);
在vm中,当Shell想要关闭时运行OnApplicationClosing:
private void OnApplicationClosing(CancelEventArgs e)
{
// Ask user to save changes, e.g. In a message box
switch (result)
{
case MessageBoxResult.Cancel:
e.Cancel = true;
return;
case MessageBoxResult.Yes:
// Save changes
break;
case MessageBoxResult.No:
break;
}
}
答案 1 :(得分:0)
你不能使用Window.Closing event吗?