Windows Phone 7: Установление, какая страница активируется во время события Application_activated

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

Вопрос

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

здесь

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

Или лучшая практика для восстановления всех ViewModels или есть другой шаблон дизайна для этого?

Это было полезно?

Решение

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

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

Я использую Отличная библиотека Mvvmlight Laurent Bugnion для 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, IndyFromoz

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top