Windows Phone 7: establecer qué página está siendo activado durante el evento Application_Activated
-
10-10-2019 - |
Pregunta
Estoy siguiendo los principios de mejores prácticas generales de la restauración de mi estado y objetos persistentes persistente y ninguno cuando una aplicación tombstoned es reactivado. Que se puede encontrar en este muy buen artículo de Microsoft
Las muestras sólo muestran un simple re-activación de la página principal de una aplicación. Sin embargo, como mi aplicación tiene varias páginas (cualquiera de los cuales podría ser desechados y therfore re-activa) y cada uno es vinculante a un objeto de modelo de vista diferente. Me gustaría saber cómo determinar qué página es en última instancia va a ser activado de manera que selectivly puedo deserializar y recuperar el objeto ViewModel correcta para esa página.
O es la mejor práctica para restaurar todos los ViewModels o hay otro patrón de diseño para esto?
Solución
He implementado un modelo simple que se describe mejor como -
- En la aplicación que está activado y desactivado caso, me envía un mensaje a las páginas que se suscriben.
- Las páginas que se suscriben al mensaje hacen la serialización / deserialización de datos.
Estoy utilizando excelente biblioteca MVVMLight de Laurent Bugnion para Windows Phone 7 . Aquí hay un código de ejemplo que ilustra la emisión de mensajes -
// Ensure that application state is restored appropriately
private void Application_Activated(object sender, ActivatedEventArgs e)
{
Messenger.Default.Send(new NotificationMessage<AppEvent>(AppEvent.Activated, string.Empty));
}
// Ensure that required application state is persisted here.
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
Messenger.Default.Send(new NotificationMessage<AppEvent>(AppEvent.Deactivated, string.Empty));
}
En el constructor de una clase modelo de vista, I fijó la suscripción a los mensajes de notificación -
// Register for application event notifications
Messenger.Default.Register<NotificationMessage<AppEvent>>(this, n =>
{
switch (n.Content)
{
case AppEvent.Deactivated:
// Save state here
break;
case AppEvent.Activate:
// Restore state here
break;
}
}
He encontrado que con esta estrategia, todos los datos relevantes para la página que está unido a un modelo de vista es guardada y restaurada correctamente.
HTH, indyfromoz