Frage

Ich folge den allgemeinen Best Practice-Prinzipien der Wiederherstellung meiner persistenten und keinen anhaltenden Zustand und Objekte, wenn eine Tombold-App wieder aktiviert wird. Die in diesem sehr guten Microsoft -Artikel zu finden sind

hier

Die Muster zeigen nur eine einfache Neuaktivierung der Hauptseite einer App. Da meine Anwendung jedoch mehrere Seiten hat (von denen jede Grabstone und Daher wieder aktiviert werden kann) und jeder an ein anderes ViewModel-Objekt bindet. Ich möchte wissen, wie Sie feststellen können, welche Seite letztendlich aktiviert wird, damit ich das richtige ViewModel -Objekt für diese Seite selektiv deserialisieren und wiederherstellen kann.

Oder ist die beste Praxis, um alle ViewModels wiederherzustellen, oder gibt es dafür ein anderes Designmuster?

War es hilfreich?

Lösung

Ich habe ein einfaches Muster implementiert, das am besten als - beschrieben wird

  1. Bei der aktivierten und deaktivierten Veranstaltung der Anwendung sende ich eine Nachricht an Abonnement -Seiten.
  2. Die Seiten, die die Nachricht abonnieren, erfordern die Serialisierung/Deserialisierung von Daten.

ich benutze Laurent Bugnions ausgezeichnete MVVMILL -Bibliothek für Windows Phone 7. Hier ist ein Beispielcode, der die Nachrichtenübertragung darstellt -

// 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));
}

Innerhalb des Konstruktors einer ViewModel -Klasse habe ich das Abonnement auf die Benachrichtigungsnachrichten eingerichtet -

// 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;
   }
}

Ich fand, dass mit dieser Strategie alle für die Seite relevanten Daten, die an ein ViewModel gebunden sind, gespeichert und ordnungsgemäß wiederhergestellt werden.

HTH, Indyfromoz

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top