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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top