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

qui

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?

È stato utile?

Soluzione

Ho implementato un modello semplice che è meglio descritta come -

  1. Nella domanda ha attivato e disattivato evento, io mando un messaggio a pagine che sottoscrivono.
  2. 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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top