Приложение 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" );
}
Другие вопросы по тегам