Я предоставляю 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 после выполнения команды, чтобы определить, следует ли мне отменить закрытие оболочки.Этот шаблон может быть расширен.