NavigationHelper_SaveState vs OnNavigatedFrom

时间:2014-07-25 01:10:11

标签: navigation windows-phone-8.1 lifecycle savestate

Windows Phone 8.1的基本页面模板具有以下方法:

private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
private void NavigationHelper_SaveState(object sender, SaveStateEventArgs e)
protected override void OnNavigatedTo(NavigationEventArgs e)
protected override void OnNavigatedFrom(NavigationEventArgs e)

我的理解是上面的NavigationHelper方法用于在NavigationHelper_SaveState中保存页面数据,以便下次加载页面时可以在NavigationHelper_LoadState中使用。

OnNavigatedFrom用于执行任何后续任务,OnNavigatedTo用于执行任何启动任务。但是,OnNavigatedFrom方法包含从前一帧中的Frame.Navigate()方法传入的数据。

我的问题是,我认为前两种方法用于在单个页面内维护数据是否正确,而后两种方法用于在两页之间传输数据?

1 个答案:

答案 0 :(得分:2)

我会尝试解释一下它是如何工作的以及它的用处。

首先,您提到的所有方法都是相互关联的,更多 - 它还涉及 SuspensionManager 。看一下 Page 的方法(事件处理程序):NavigationHelper_LoadState nad NavigationHelper_SaveState是从导航事件运行的。他们订阅了页面构造函数中的事件:

this.navigationHelper.LoadState += this.NavigationHelper_LoadState;
this.navigationHelper.SaveState += this.NavigationHelper_SaveState;

并通过调用 NavigationHelper的方法在导航事件*中触发它们:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
   this.navigationHelper.OnNavigatedTo(e);
}
// inside the method event is fired:
if (this.LoadState != null)
{
    this.LoadState(this, new LoadStateEventArgs(e.Parameter, null));
}

LoadState SaveState 是帮助您更轻松恢复网页的帮助程序。它有用吗? - 当您的Page的资源被释放时,一段时间后您想要将其恢复。简单示例:您使用FilePicker,ShareTarget,您的应用程序已被暂停并释放其资源,然后当您激活您的应用程序(应该带回您的页面)时,可能需要恢复页面的资源(例如您拥有的页面)在导航期间通过参数传递)。

另请注意,这些案例还涉及 SuspensionManager ,您应该注意在App.xaml.cs中恢复您的应用程序( OnLaunched 已激活和其他)。

另请注意,这些模板只是帮助者,您可能需要一种不同的行为,您可以自己实施。

MSDN上的一些资源:LifecycleLaunching, resuming, and multitaskingGuidelines for app suspend and resume