Ver notificar (modelos) de cerrar el programa
-
10-10-2019 - |
Pregunta
Así que me dio mi / MVVM / mef programa prisma funcionando muy bien junto, el usuario está introduciendo datos en la aplicación, a continuación, se cierra la aplicación (o apaga el equipo).
¿Cómo puedo obtener mi punto de vista (Modelo) notificado del programa de cierre / el apagado del equipo, por lo que puede guardar los datos de los usuarios o tal vez preguntar si estos deben ser guardados?
La pérdida de datos en el programa de cierre es definitivamente algo que debe evitarse, y que no tiene sentido para guardar cosas en cada sola pulsación de tecla del usuario.
Solución
Me exponer CompositeCommands que los clientes pueden registrarse para interesantes para los "eventos" globales, por ejemplo.
public static class HostCommands
{
private static readonly CompositeCommand Shutdown = new CompositeCommand();
public static CompositeCommand ShutdownCommand
{
get { return Shutdown; }
}
}
Me activar el comando de apagado en mi concha, por ejemplo.
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()));
}
Actualizar
No manipule el escenario cancelar, pero se puede aplicar esto a través del objeto que se pasa al comando. Por ejemplo, en el código anterior que pase en un CancelEventArgs cual los clientes podían manipular es decir, mediante el establecimiento de Cancelar = true. Podría inspeccionar este valor en mi controlador de eventos cerrado Shell después de que el comando se ejecute para derivar si debo cancelar el cierre de la concha. Este patrón se puede ampliar sucesivamente.