Windows Phone 7:Application_Activatedイベント中にアクティブ化されているページを確立する

StackOverflow https://stackoverflow.com/questions/4188468

質問

私は、墓石が再起動されたときに、永続的で永続的な状態とオブジェクトを復元するという一般的なベストプラクティスの原則に従っています。これはこの非常に良いMicrosoftの記事にあります

ここ

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

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

役に立ちましたか?

解決

私は - として最もよく説明されている単純なパターンを実装しました -

  1. アプリケーションのアクティブ化された非アクティブイベントでは、購読ページにメッセージを送信します。
  2. メッセージに登録するページは、データのシリアル化/脱派化を実行します。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top