Windows Phone 7: определение, какая страница активируется во время события Application_Activation - PullRequest
0 голосов
/ 15 ноября 2010

Я следую общепринятым принципам восстановления моего постоянного и непостоянного состояния и объектов при повторной активации приложения, захороненного в могиле.Это можно найти в этой очень хорошей статье Microsoft

здесь

Примеры показывают только простую повторную активацию главной страницы приложения.Однако, поскольку у моего приложения есть несколько страниц (любая из которых может быть захоронена и, следовательно, может быть повторно активирована), и каждая из них связана с другим объектом ViewModel.Я хотел бы знать, как определить, какая страница в конечном итоге будет активирована, чтобы я мог выборочно десериализовать и восстановить правильный объект ViewModel для этой страницы.другой шаблон дизайна для этого?

1 Ответ

1 голос
/ 16 ноября 2010

Я реализовал простой шаблон, который лучше всего описать как -

  1. В событии «Активировано и деактивировано» приложение отправляет сообщение на подписывающиеся страницы.
  2. Страницы, которые подписываются на сообщение, выполняют сериализацию / десериализацию данных.

Я использую Отличную библиотеку Лорана Бюньона MVVMLight для Windows Phone 7 . Вот пример кода, иллюстрирующего трансляцию сообщения -

// 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, индифромоз

...