0

トゥームストーンされたアプリが再アクティブ化されたときに、永続的および永続的でない状態とオブジェクトを復元するという一般的なベストプラクティスの原則に従っています。これは、この非常に優れたMicrosoftの記事に記載されています。

ここ

サンプルは、アプリのメインページの単純な再アクティブ化のみを示しています。ただし、私のアプリケーションには複数のページがあり(いずれもトゥームストーンされて再アクティブ化される可能性があります)、各ページは異なるViewModelオブジェクトにバインドされています。どのページが最終的にアクティブ化されるかを確認して、そのページの正しいViewModelオブジェクトを選択的に逆シリアル化して復元できるようにする方法を知りたいです。

または、すべてのViewModelを復元するためのベストプラクティスですか、それともこのための別のデザインパターンがありますか?

4

1 に答える 1

1

私は次のように最もよく説明される単純なパターンを実装しました-

  1. アプリケーションのアクティブ化および非アクティブ化イベントで、サブスクライブしているページにメッセージを送信します。
  2. メッセージをサブスクライブするページは、データのシリアル化/逆シリアル化を実行します。

私は、LaurentBugnionの優れたMVVMLightライブラリをWindowsPhone7用に使用しています。メッセージブロードキャストを示すサンプルコードを次に示します-

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

ViewModelクラスのコンストラクター内で、通知メッセージのサブスクリプションを設定します-

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

この戦略では、ViewModelにバインドされているページに関連するすべてのデータが適切に保存および復元されることがわかりました。

HTH、indyfromoz

于 2010-11-15T21:07:06.677 に答える