在注销/关闭之前,应用程序要求保存,如记事本/ word / excel等

时间:2013-11-19 12:26:39

标签: c# wpf mvvm prism

问题

我有一个使用Prism的WPF / MVVM应用程序。当用户进行一些更改并在应用程序中有一些未保存的东西时。然后,使用此未保存的更改,用户注销或关闭应用程序

发生这种情况时,我希望应用程序停止注销/关闭并要求用户进行保存。

对于WinForm应用程序,我认为使用FormClosing事件可以解决问题。 WPF应用程序的解决方案是什么?

我正在研究几种解决方案,并将在明天发布。到那时,欢迎任何建议。

2 个答案:

答案 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吗?