NavigationHelper\u保存状态与OnNavigatedFrom

NavigationHelper\u保存状态与OnNavigatedFrom,navigation,windows-phone-8.1,lifecycle,savestate,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) pro

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\u SaveState
中,以便下次加载页面时可以在
NavigationHelper\u LoadState
中使用

OnNavigatedFrom
用于执行任何最后一秒的任务,
OnNavigatedTo
用于执行任何开始任务。而且,
OnNavigatedFrom
方法包含从前一帧中的
Frame.Navigate()方法传入的数据


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

我将尝试解释一下它是如何工作的以及在哪里有用

首先,你提到的所有方法都是相互关联的,更重要的是,它还涉及到SuspensionManager。查看单个页面的方法(事件处理程序):
NavigationHelper\u LoadState
nad
NavigationHelper\u SaveState
是从导航事件运行的。他们订阅了页面构造函数中的事件:

this.navigationHelper.LoadState += this.NavigationHelper_LoadState;
this.navigationHelper.SaveState += this.NavigationHelper_SaveState;
它们在“导航事件”中通过调用NavigationHelper的方法激发:

LoadState和SaveState是帮助程序,应该可以更容易地恢复页面。什么有用当您的页面资源被释放时,并且在一段时间后您希望将其恢复。简单示例:您使用FilePicker、ShareTarget,您的应用程序已挂起且其资源已释放,然后当您激活应用程序(应恢复页面)时,可能需要恢复页面的资源(例如,您在导航期间通过参数传递的资源)

另外请注意,这些情况也涉及SuspensionManager,您应该注意在app.xaml.cs(OnLaunched、Activated和other)中恢复您的应用程序

还要注意的是,这些模板只是帮助者,您可能需要一个不同的行为,您肯定可以自己实现


MSDN:,和。

Hmmm…您是否保存了SaveState和LoadState,它们的行为与RoamingSettings和LocalSettings类似,只是它们是特定页面的本地设置?所以,如果我保存、关闭、然后加载,它仍然可用?不完全是设置,但与它们类似,它是
字典
。在OnNavigatedFrom中,数据在SessionStateForFrame中的特定
\u pageKey
中设置。调用
SuspensionManager.SaveAsync()
时,所有内容都会被保存。从模板创建一个HubApp-然后查看app.xaml.cs挂起事件,还可以查看RestoreAsync方法。看看公共文件夹中的代码-NavigationHelper和SuspendionManager。
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));
}