уведомить View (Models) о закрытии программы - PullRequest
5 голосов
/ 16 декабря 2010

Итак, моя программа prism / mvvm / mef хорошо работает, пользователь вводит данные в приложение, затем закрывает приложение (или выключает компьютер).

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

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

1 Ответ

8 голосов
/ 16 декабря 2010

Я предоставляю 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, которыми могут манипулировать клиенты, т. Е. Устанавливая Cancel = true.Я мог проверить это значение в моем обработчике закрытых событий Shell после выполнения команды, чтобы определить, следует ли мне отменить закрытие оболочки.Этот шаблон может быть расширен.

...