Expongo CompositeCommands que los clientes pueden registrarse para interesantes "eventos" globales, p.
public static class HostCommands
{
private static readonly CompositeCommand Shutdown = new CompositeCommand();
public static CompositeCommand ShutdownCommand
{
get { return Shutdown; }
}
}
Active el comando shutdown en mi shell, p.
public Shell()
{
InitializeComponent();
Closing += (sender, e) =>
{
if (HostCommands.ShutdownCommand.CanExecute(e))
HostCommands.ShutdownCommand.Execute(e);
};
}
Y los clientes pueden registrarse de la siguiente manera, por ejemplo
public SomeViewModel(IEventAggregator eventService)
{
//blah, blah, blah...
HostCommands.ShutdownCommand.
RegisterCommand(new DelegateCommand<object>(_ => Save()));
}
actualización
Yo no manejo el escenario cancelar, pero se puede aplicar esto a través del objeto que se pasa a la mando. Por ejemplo, en el código anterior, paso un CancelEventArgs que los clientes podrían manipular, es decir, configurando Cancelar = verdadero. Podría inspeccionar este valor en mi controlador de evento cerrado de Shell después de que el comando se haya ejecutado para deducir si debo cancelar el cierre del shell. Este patrón se puede expandir.
Genial, se ve genial! Solo me pregunto: en SomeViewModel escribió "new Command (_ => Save())" - ¿no debería ser esto "nuevo DelegateCommand ((= = Guardar())"? – Sam
@Sam tienes razón. He heredado de DelegatedCommand. Actualizaré la muestra para que solo use tipos de Prism. –
Ah, y me pregunto si sería mejor usar el prisma de eventos (eventos débilmente acoplados), así que no tengo que preocuparme por la desvinculación. – Sam