这是另一篇文章的续集:
WinRT/Metro: NavigationCacheMode.Disabled和LayoutAwarePage
有些人反应看了上述文章仍然对一些Page或者是LayoutAwarePage的参数变化有些不清楚。我觉得配些图就更清晰了,我又把上面那篇文章用到的程序加入了输出Parameter,pageState和Mode的显示。当然,就是在LayoutAwarePage的LoadState方法和Page的OnNavigatedTo方法中加入输出代码,很简单的,代码就不贴了,请参考上文工程代码。
那么当程序第一次启动后,第一次加载页面:
第一次加载页面NavigationMode为New,同时parameter和pageState都也是null。
设置好数据,创建同一个类型的下一个页面:
新页面被创建,parameter会上上一个页面传入的数据,所以不是null。
最后选择后退,返回上一个页面:
此时,pageState不是null,因此此时SuspensionManager的FrameSessionState相对当前Frame中当前Page的名称(根据Frame的BackStackDepth属性标识)是有值的。虽然Mode是Back,但是整个页面完全是新创建的,因为NavigationCacheMode默认是Disabled。