And*_*ord 2 c# windows-runtime windows-store-apps windows-8.1
我正在努力将Windows Phone 8应用程序移植到Windows应用商店8.1,我对Win 8.1上的页面导航如何工作感到困惑.它似乎与WP 8完全不同:
给定:PageA作为主页面和其他一些页面PageB. 导航:启动应用程序,向前导航到B并返回到A.
Windows Phone 8:
- Constructor of PageA
- PageA.OnNavigatedTo()...
- PageA was just created? Ok, create ViewModel
- Click some Button to navigate to PageB
- Creation of PageB + actual Navigation...
- Click some Button to navigate back to PageA
- PageA.OnNavigatedTo()...
- PageA was just created? No, use existing ViewModel
Run Code Online (Sandbox Code Playgroud)
Windows应用商店App 8.1:
- Constructor of PageA
- PageA.OnNavigatedTo()...
- PageA was just created? Ok, create ViewModel
- Click some Button to navigate to PageB
- Creation of PageB + actual Navigation...
- Click some Button to navigate back to PageA
- Constructor of PageA
- PageA.OnNavigatedTo()...
- PageA was just created? Ok, create ViewModel
Run Code Online (Sandbox Code Playgroud)
不同之处在于如何处理后向导航.在WP 8上,只使用了PageA的现有实例,Win 8.1创建了一个完整的PageA实例.因此,必须重新创建ViewModel ......
这似乎在Win 8.1存在的导航没有什么区别来自或到一个页面.这是正确的吗?或者我做错了什么?
在某些页面上创建视图模型是相当多的工作.当导航到PageB并在导航回来时重新创建它时,如何丢弃现有的PageA?当然这可以节省内存,但是如果Windows Phone可以在堆栈上处理不同的页面,Win 8.1应该能够做同样的事情,不应该吗?
当然,导航远离PageA时可以保存视图模型并加载而不是在导航时重新创建.但是因此视图模型必须是可序列化的,并且混合ViewModel非常复杂.
有没有办法将Pages保留在内存中?
您可以设置NavigationCacheMode一个Page到Enabled或者Required(默认情况下它是Disabled):
public BasicPage1()
{
this.InitializeComponent();
this.NavigationCacheMode =
Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
}
Run Code Online (Sandbox Code Playgroud)
您还可以设置要为帧缓存的页数Frame.CacheSize(默认为10).
msdn链接:
http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.frame.cachesize.aspx
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |