Уведомление о просмотре (модели) закрытия программы

StackOverflow https://stackoverflow.com/questions/4459247

Вопрос

Поэтому я получил свою программу PRISM/MVVM/MEF хорошо, пользователь вводит данные в приложении, а затем закрывает приложение (или закрывает компьютер).

Как я могу получить свое представление (модель) уведомлена о закрытии программы / выключении компьютера, чтобы он мог либо сохранить данные пользователей, либо, может быть, спросить, следует ли их сохранить?

Потеря данных о закрытии программы, безусловно, следует избегать, и не имеет смысла сохранять вещи на каждом ключевом потоке пользователя.

Это было полезно?

Решение

Я выставляю CompositeCommands, которые клиенты могут зарегистрироваться для интересных глобальных "событий", например,

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

    public static CompositeCommand ShutdownCommand
    {
        get { return 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, которые клиенты могли манипулировать IE, установив DeclEl = true. Я мог бы осмотреть это значение в моем обработчике с закрытым событием Shell после того, как команда выполнила, чтобы получить, должен ли я отменить закрытие оболочки. Этот шаблон может быть расширен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top