2016-01-06 72 views
1

我正在使用帶有導航框架的SplitView在C#中爲Windows 10編寫通用應用程序。 我有一個邊欄,裏面有一個動態加載的列表,當我點擊其中一個項目時,我使用菜單中的模型導航到一個頁面,以指示我應該在框架中加載哪個項目。當在UWP中的框架(SplitView)中導航時丟失DataContext

我跟着這個示例:Windows-universal-samples/Samples/XamlNavigation/

唯一的區別是,而不是具有多頁,我只有一個被載入每次我選擇具有其特定的視圖模型不同的項目時間的頁面。我使用Autofac加載ViewModels和MyFrame.Navigate(typeof(DetailsPage), idOfItem);來加載頁面。

問題是,每當我導航到下一頁時,似乎前一個的實例都會丟失,而當我回到原位時,它會加載一個新實例。當我在RootFrame中導航時,這種事情似乎不會發生,並且在Windows Phone 8.1中不會發生。

我一直在網上尋找解決方案几個小時,但我找不到任何相關的東西。

有誰知道爲什麼會發生這種情況? 我希望我的問題清楚。

非常感謝您的回答。

回答

2

您觀察到的行爲是正確的和預期的。您有兩種選擇:

您可以使用Page.NavigationCacheMode,將其設置爲Required。這很容易,但可能會消耗大量內存。

或者您可以將頁面狀態保存在OnNavigatedFrom中並將其恢復爲OnNavigatedTo。事實上,根據你的場景,假設當你返回頁面時可以構造狀態(你的DataContext),就像你在第一次訪問頁面時一樣,你甚至可能不需要在OnNavigatedFrom中保存狀態。

+0

我試過NavigationCacheMode,沒有工作,當第二次導航並返回時,實例保持不變,而不是前一個。 您的意思是每當我離開時立刻瀏覽頁面?我不知道,重新加載DataContext似乎有點太痛苦,但如果這是唯一的方法... –

+0

如果重新加載你的DataContext是「太痛苦」,你可能不得不考慮緩存它。但是,當然你的緩存應該獨立於頁面實例,否則它會隨着頁面消失。但要小心,沒有策略(或錯誤)的緩存是內存泄漏的另一個名稱。 –

+0

順便說一下,「Thombstoning」是Windows Phone 7的術語,並且不再經常使用。但是,這基本上就是我所建議的。 –