Приложение Metro SuspensionManager Переопределить поведение SaveState
Как мне изменить SuspensionManager
объект в приложении Metro, чтобы SaveState
для MainPage
только и отменить состояние и навигацию для любых дочерних страниц?
Например, у меня есть MainPage
что позволяет вам перейти к ChildPage
, Если приложение Metro Closed
или же Suspended
, Я хочу ChildPage
переопределить MainPage
государственные ценности.
Теперь, когда пользователь в следующий раз откроет приложение, MainPage
должен открываться а не ChildPage
, Так же MainPage
следует показать государству, что ChildPage
обновлено до того, как приложение было Closed
или же Suspended
,
Любые идеи о том, как SuspensionManager
объект может быть безопасно изменен для достижения этой цели?
2 ответа
Используя предложение от Даниеловича (которое НЕ является полным), решение состоит из 2 частей:
Во-первых:
- Больше не сохранять состояние в
pageState
сохранить объект, используяSessionState
объект. Зачем? Это так что всеPages
может поделиться тем жеState
Информация.
Во-вторых:
Чтобы убедиться, что
NavigationState
не сохраняется так, чтобыMainPage
всегда страница по умолчанию, нам нужно изменитьSaveFrameNavigationState
вSuspensionManager
следующее:private static void SaveFrameNavigationState(Frame frame) { var frameState = SessionStateForFrame(frame); frame.GetNavigationState(); frameState["Navigation"] = "1,1,0,15,Skycap.MainPage,12,0"; }
Почему бы просто не добавить свои данные из ChildPage в словарь SessionState и заполнить их в MainPage, когда приложение возобновит работу?
Вам даже не нужно изменять SuspensionManager для этого!
public BasicPage1() {
this.InitializeComponent();
Application.Current.Suspending += Current_Suspending;
Application.Current.Resuming += Current_Resuming;
}
void Current_Resuming( object sender, object e ) {
var name = SuspensionManager.SessionState["name"].ToString();
}
void Current_Suspending( object sender, Windows.ApplicationModel.SuspendingEventArgs e ) {
SuspensionManager.SessionState.Add( "name", "danielovich" );
}