Windows Phone 7: Установление, какая страница активируется во время события Application_activated
-
10-10-2019 - |
Вопрос
Я следую об общих принципах лучшей практики восстановления моего настойчивого и ни одного постоянного состояния и объектов, когда загрязненное приложение повторно активируется. Который можно найти в этой очень хорошей статье Microsoft
Образцы показывают только простую повторную активацию главной страницы приложения. Однако, поскольку в моем приложении есть несколько страниц (любая из которых может быть заглушена и, следовательно, повторно активирована), и каждый из них связывает с различным объектом ViewModel. Я хотел бы знать, как выяснить, какая страница в конечном итоге будет активирована, чтобы я мог избирательно десериализировать и восстановить правильный объект ViewModel для этой страницы.
Или лучшая практика для восстановления всех ViewModels или есть другой шаблон дизайна для этого?
Решение
Я реализовал простой шаблон, который лучше всего описать как -
- В активированном и деактивированном событии приложения я отправляю сообщение на подписку на страницы.
- Страницы, которые подписываются на сообщение, выполняют сериализацию/десериализацию данных.
Я использую Отличная библиотека 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