NavigationHelper\u保存状态与OnNavigatedFrom
Windows Phone 8.1的基本页面模板具有以下方法: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
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
nadNavigationHelper\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));
}