2014-02-11 63 views
2

我正在將Windows Phone 8應用程序移植到Windows Store 8.1,我對如何在Win 8.1上運行頁面導航感到困惑。看起來它與WP 8完全不同:在Windows應用商店應用中導航 - 頁面在Back-Navigation上重新創建?

鑑於:PageA爲主頁面和其他一些頁面PageB。 導航:啓動應用程序,瀏覽着B和回A

的Windows Phone 8:

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 

- 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可以處理堆棧上的不同頁面,Win 8.1應該可以做到這一點,不是嗎?

當然,瀏覽模型可以在從PageA導航離開並加載而不是在導航回來時重新創建時保存。但是,因此視圖模型必須是可序列化的,並且concreate ViewModel相當複雜。

有沒有辦法讓頁面保留在內存中?

回答

5

您可以在PageEnabledRequired設置NavigationCacheMode(默認情況下它是Disabled):

public BasicPage1() 
{ 
    this.InitializeComponent(); 

    this.NavigationCacheMode = 
     Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled; 
} 

您還可以設置你想要多少個頁面被緩存與Frame.CacheSize框架(10由默認)。

MSDN鏈接:

http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.page.navigationcachemode.aspx

http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.frame.cachesize.aspx

+0

謝謝你。我不知道爲什麼這沒有被更廣泛地提及或實際上不是默認的。 –