Windows Phone 7: Stabilire quale pagina viene attivato durante l'evento Application_Activated
-
10-10-2019 - |
Domanda
sto seguendo i principi di pratica migliori generali di ripristinare il mio stato e gli oggetti persistenti persistente e nessuno quando un'applicazione contrassegnati per la rimozione è ri-attivato. Che si trova in questo ottimo articolo di Microsoft
I campioni mostrano soltanto una semplice riattivazione della pagina principale di un'applicazione. Tuttavia, come mia domanda ha più pagine (ciascuno dei quali può essere Definitivamente e therfore riattivata) e ognuno è vincolante per un oggetto ViewModel differente. Vorrei sapere come accertare quale pagina è in ultima analisi, sta per essere attivato in modo che possa selectivly deserializzare e recuperare l'oggetto ViewModel corretto per quella pagina.
In alternativa è la pratica migliore per ripristinare tutte le ViewModels o c'è un altro modello di progettazione per questo?
Soluzione
Ho implementato un modello semplice che è meglio descritta come -
- Nella domanda ha attivato e disattivato evento, io mando un messaggio a pagine che sottoscrivono.
- Le pagine che sottoscrivono il messaggio fare la serializzazione / deserializzazione dei dati.
biblioteca MVVMLight eccellente di Laurent Bugnion per Windows Phone 7 . Ecco alcuni esempi di codice che illustra la trasmissione messaggio -
// 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));
}
All'interno del costruttore di una classe ViewModel, ha installato l'abbonamento per i messaggi di notifica -
// 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;
}
}
ho scoperto che con questa strategia, tutti i dati relativi alla pagina che è destinata a un ViewModel viene salvato e ripristinato correttamente.
HTH, indyfromoz