Я создаю приложение wp7 в Silverlight. Все состояние моего приложения хранится в NavigationContext.QueryString
. Если бы это можно было сохранить при деактивации приложения и перейти на эту страницу при повторной активации приложения, это позаботилось бы о моих требованиях к захоронению.
Однако я не совсем уверен, как это сделать. Я думал о сохранении NavigationContext.QueryString
в словарь State
в App.xaml.cs::Application_Deactivated()
, но у этого кода нет доступа к NavigationContext.QueryString
. Есть ли другой способ, которым я могу сделать это?
Полагаю, я мог бы просто сохранять строку запроса в словаре состояний при каждой навигации, а затем восстанавливать ее при повторной активации приложения. Или есть лучший подход?
Обновление : Исходя из ответа indyfromoz , я хотел бы реализовать следующее
OnNavigatedToHandler()
{
// save NavigationContext.QueryString in the State dictionary
}
Чтобы уменьшить избыточность, я подумал, что реализую это в классе, который наследуется от PhoneApplicationPage
, затем все остальные мои страницы наследуют от этого класса. Тем не менее, я получаю проблему, что все классы страниц partial
, потому что они также определены в сгенерированном коде. Я не хочу менять сгенерированный код, потому что менять его каждый раз, когда он восстанавливается, было бы огромной болью.
Есть ли лучший способ сделать это?
Обновление 2 : Вот то, что я сейчас взламываю вместе на главной странице моего приложения (той, на которую переходят при запуске):
public partial class MainPivot : PhoneApplicationPage
{
public MainPivot()
{
InitializeComponent();
Loaded += new RoutedEventHandler(MainPivot_Loaded);
PhoneApplicationService.Current.Deactivated += new EventHandler<DeactivatedEventArgs>(App_Deactivated);
MessageBox.Show("launching main pivot (state count: " + PhoneApplicationService.Current.State.Count + ")");
if (PhoneApplicationService.Current.State.Count != 0)
{
Debug.Assert(PhoneApplicationService.Current.State.ContainsKey(QueryStringKey),
"State is initialized, but contains no value for the query string");
string oldQueryString = (string)PhoneApplicationService.Current.State[QueryStringKey];
MessageBox.Show("Old query string: " + oldQueryString);
NavigationService.Navigate(new Uri(oldQueryString));
}
}
public readonly string QueryStringKey = "queryString";
void App_Deactivated(object sender, DeactivatedEventArgs e)
{
PhoneApplicationService.Current.State[QueryStringKey] = NavigationService.Source;
}
// ...
Работает (вроде), но безобразно.
Обновление 3 : похоже, ОС wp7 автоматически перезагрузит правильную страницу в приложении на основе страниц. Я на самом деле использую страницы, так что, возможно, здесь мне не нужно много работать.
Однако, похоже, это не работает. Я запускаю приложение, захожу на страницу, нажимаю «Пуск», затем нажимаю «Назад». На экране появляется сообщение «Возобновление ...», но кажется, что оно висит там. Должен ли мой код реагировать каким-либо образом на этом этапе? Есть ли способ сохранить отладчик подключенным даже после нажатия «Старт»?