C# Windows应用商店应用程序中的导航-是否在后台导航中重新创建页面?

C# Windows应用商店应用程序中的导航-是否在后台导航中重新创建页面?,c#,windows-runtime,windows-store-apps,windows-8.1,C#,Windows Runtime,Windows Store Apps,Windows 8.1,我正在将Windows Phone 8应用程序移植到Windows Store 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

我正在将Windows Phone 8应用程序移植到Windows Store 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
 - 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
Windows应用商店应用程序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

 - PageA.OnNavigatedTo()...
 - PageA was just created? No, use existing ViewModel
 - 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
区别在于如何处理反向导航。在WP 8上,只使用现有的PageA实例,Win 8.1创建了一个完整的PageA新实例。因此,视图模型也必须重新创建

在Win 8.1中,从导航到页面似乎没有区别这是对的吗?还是我做错了什么?

在某些页面上,创建视图模型是相当多的工作。在导航到PageB时扔掉现有的PageA,在返回时重新创建它,这有什么意义?当然这可以节省内存,但是如果Windows Phone可以处理stack上的不同页面,Win 8.1应该也能做到,不是吗

当然,视图模型可以在导航离开PageA时保存并加载,而不是在返回时重新创建。但是,因此视图模型必须是可序列化的,而concreate ViewModel相当复杂


有没有办法将页面保存在内存中

您可以将
页面上的
导航缓存模式
设置为
已启用
所需
(默认情况下为
已禁用
):

您还可以使用
Frame.CacheSize
(默认为10)设置要为一个框架缓存多少页

msdn链接:


谢谢你。我不知道为什么没有更广泛地提到这一点,或者说这不是默认情况。