Как сохранить состояние страницы в течение всего времени работы приложения? (РГ.8)

1

Например, у меня есть 3 страницы в моем приложении. Он имеет следующую навигационную карту:

MainPage >> InfoPage >> SettingsPage.

Итак, если я перейду в SettingsPage из InfoPage, а затем воспользуюсь кнопкой "Назад", InfoPage сохранит свое состояние.

Но если я перейду из InfoPage в MainPage с помощью кнопки "Назад" и снова вернусь к InfoPage, InfoPage потеряет свое состояние и снова начнет загружаться.

Как я могу сохранить состояние InfoPage в течение всего времени, пока приложение работает? Мне нужно инициализировать его только один раз.

  • 0
    почему Вы не отключаете кнопку «Назад», когда находитесь в Infopage?
Теги:
windows-phone-8

1 ответ

2
Лучший ответ

Лучший способ справиться с этим - создать кэш для этой страницы. Затем при загрузке загрузите кеш из изолированного хранилища.

Ваш поток будет выглядеть примерно так

> >>OnNavigatedToMethod_AnyPage
> -->Check if cache exists in isolated storage
> --->If it does get the cache and load the values into the page
> ---> if it doesnt exist create a new one and save default values
> 
> >>OnNavigatedFromMethod_AnyPage
> -->Load values into cache object
> --->Save cache object to isolated storage

Итак, как мы на самом деле это делаем?

Ну, во-первых, загрузите изолированную библиотеку dll, которую я написал, называемую EZ_Iso

Следующий шаг - реализовать его.

Сначала создайте объект кеша страницы

[DataContractAttribute]//This tells the EZ_Iso dll that this object is serializable 
public PageOneCache{

    [DataMember] //This tells the serializer to serialize this member
    public bool flag1 {get; set;}

    [DataMember]
    public List<int> ages {get;set;}

    public int boxes {get; set;} // This member doesn't have the [DataMember] so it wont get saved
}

Теперь, когда у нас есть наш объект кеша, он сохранит его

PageOneCache pageOneCache = new PageOneCache(){ flag1 = true, ages = new List<int>(){1,3,4}, boxes = 2};

if(EZ_iso.IsolatedStorageAccess.FileExists("pageOneCache")
   Ez_iso.IsolatedStorageAccess.OverwriteFile("pageOneCache",pageOneCache);
else
   Ez_iso.IsolatedStorageAccess.SaveFile("pageOneCache",pageOneCache);

Как только вы закончите, ваш кеш будет сохранен в изолированном хранилище телефона. Это будет безопасно независимо от того, работает ли приложение или нет. Телефон может полностью закрыться, и все будет хорошо.

Теперь для получения

PageOneCache pageOneCache = (PageOneCache)EZ_iso.IsolatedStorageAccess.GetFile("pageOneCache",typeof(PageOneCache));

Это!

  • 0
    Спасибо! Еще один вопрос. Как добавить эту dll в проект и получить к ней доступ в проекте?
  • 0
    Я пытался использовать «Добавить ссылку ...», но Visual Studio говорит, что это несовместимо.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню