2010-11-15 3 views
0

Я следую общим принципам наилучшей практики восстановления моего постоянного и постоянного состояния и объектов при повторном активировании надгробного приложения. Что можно найти в этой очень хорошей статье MicrosoftWindows Phone 7: установка страницы, которая активируется во время события Application_Activated

here

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

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

ответ

1

Я реализовал простую модель, которая лучше всего описывается как -

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

Я использую Laurent Bugnion's excellent MVVMLight library for 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

+0

Благодарим за это. Это выглядит великолепно. Я также использую MVVM Light. Я дам эту картину сегодня утром и дам вам знать. Я довольно новичок в MVVM, и я еще не использовал платформу обмена сообщениями! – NER1808