Сохранение состояния страницы в 3-страничном приложении в WP7

Ну, это мой первый вопрос здесь, и, насколько я искал, я не нашел решения своей проблемы. Я пишу свое первое приложение rssreader для WP7, и у меня возникла проблема с состоянием страницы. У меня есть 3 страницы, и навигация выглядит так: главная страница >>> listitemspage >>> detailspage. Главная страница — это модель с привязкой к данным с предварительно настроенными элементами категорий каналов (URL-адреса и имена), listitempage — это страница, на которой я реализовал веб-клиент для чтения элементов каналов, а страница сведений — это место, куда я передаю сведения о выбранном элементе каналов из списка. Состояние страницы работает в следующих ситуациях:

mainpage >>> start button >>> back button (OK)<br/>
listitempage >>> start button >>> back button (Doesn't work)<br/>
detailspage >>> start button >>> back button (OK)<br/>

На странице сведений я сохраняю состояние страницы, используя OnNavigatedTo/From и State.TryGetValue. Кажется, это работает, но если я создаю кнопку с задачей браузера, чтобы пользователь мог перейти к полной статье, когда браузер открывается, и пользователь нажимает кнопку «Назад» на странице сведений. государственные работы. Если пользователь нажимает кнопку «Назад» во второй раз, приложение закрывается, а не возвращается к странице списка. Так вот у меня тоже такая проблема:

detailspage >>> browserbuttontask >>> backbutton >>> restorepage >>> backbutton->exit<br/>

Любые идеи?


person user1004994    schedule 20.10.2011    source источник


Ответы (3)


Я бы рекомендовал использовать помощник Tombstone для codeplex, написанный Мэттом Лейси (из группы пользователей Windows Phone).

http://tombstonehelper.codeplex.com/

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

Надеюсь, это поможет Rgds Саймон

person Darkside    schedule 20.10.2011
comment
Спасибо за ответ Дарксайд. Я уже использовал это без каких-либо результатов. К сожалению, с помощником по надгробиям даже не было правильно сохранено состояние страницы сведений. Метод, который я использую для сохранения текущего состояния страницы сведений, работает отлично (за исключением проблемы с задачей браузера), но я хочу что-то подобное и для страницы списка, и у меня закончились идеи. Я хотел бы сделать это с состоянием страницы, не возясь с изолированным хранилищем. Если это возможно. - person user1004994; 20.10.2011

Если вы хотите сохранить состояние страницы, не возясь с IsolatedStorage, попробуйте SterlingDB. Он использует IsolatedStorage, но его очень просто настроить и использовать. Вы можете добавить стерлингов через nuget. Вам придется вставлять данные, которые вы хотите сохранить в классе, но сохранение и загрузка очень просты.

Кроме того, вы также можете ознакомиться с Калибурн Микро. Он добавляет жизненный цикл страницы в ваши ViewModels, такие как OnInitialize, OnActivate, OnDeactivate. Он также добавляет некоторые приятные вещи для WP7, такие как автоматическое сохранение свойств ViewModel в IsolatedStorage или состояние телефона.

http://www.sterlingdatabase.com/

person Derek Beattie    schedule 20.10.2011
comment
Спасибо Дерек за ваши предложения. Хотя они выглядят слишком сложными для меня, чтобы реализовать их (я пока новичок). Давайте сейчас сосредоточимся на том, как восстановить данные из listitemspage. Я попытался реализовать OnNavigatedTo/From и State.TryGetValue на этой странице, но я предполагаю, что при вызове OnNavigateTo страница никогда не перезагружалась, чтобы запустить событие веб-клиента для получения элементов. Есть ли способ сделать это так? - person user1004994; 20.10.2011
comment
Поэтому, когда вы открываете браузер, ваш задний стек приложений стирается. И причина, по которой он возвращается на вашу страницу сведений, заключается в том, что он находится в заднем стеке браузера. В этот момент вам понадобится некоторая логика, чтобы выяснить, откуда вы пришли и куда она должна перейти на другую кнопку «Назад». Посетите buildmobile.com/windows-phone-7-navigation, чтобы узнать, как вы может подписаться на событие OnBackKeyPress. - person Derek Beattie; 20.10.2011

Похоже, ваше приложение выдает исключение при восстановлении состояния на странице списка, что приводит к завершению работы приложения.

Вы пробовали делать все это с подключенным отладчиком? Он должен показать вам, какое исключение выбрасывается и где.

person Richard Szalay    schedule 23.10.2011
comment
Я обновил свой код с помощью нового SDK манго, и теперь обработка состояния работает нормально. Спасибо, ребята, за ваши ответы! - person user1004994; 27.10.2011