Например, у меня есть 3 страницы в моем приложении. Он имеет следующую навигационную карту:
MainPage >> InfoPage >> SettingsPage.
Итак, если я перейду в SettingsPage из InfoPage, а затем воспользуюсь кнопкой "Назад", InfoPage сохранит свое состояние.
Но если я перейду из InfoPage в MainPage с помощью кнопки "Назад" и снова вернусь к InfoPage, InfoPage потеряет свое состояние и снова начнет загружаться.
Как я могу сохранить состояние InfoPage в течение всего времени, пока приложение работает? Мне нужно инициализировать его только один раз.
Лучший способ справиться с этим - создать кэш для этой страницы. Затем при загрузке загрузите кеш из изолированного хранилища.
Ваш поток будет выглядеть примерно так
> >>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));
Это!