在UWP中导航回Frame(SplitView)时丢失DataContext

时间:2016-01-06 14:05:55

标签: c# mvvm uwp windows-10-universal

我正在使用带有导航框架的SplitView在C#中为Windows 10编写通用应用程序。 我有一个带有我动态加载的列表的侧边栏,当我点击其中一个项目时,我使用菜单中的模型导航到一个页面,以指示我应该在框架中加载哪个项目。

我按照此示例:Windows-universal-samples/Samples/XamlNavigation/

唯一的区别是,每次我选择具有特定ViewModel的不同项时,我只有一个页面,而不是多个页面。我使用Autofac加载ViewModels并MyFrame.Navigate(typeof(DetailsPage), idOfItem);加载页面。

问题是,每次我导航到下一页时,似乎前一个实例都丢失了,当我向后导航时,它会加载一个新实例。当我在RootFrame中导航时,似乎没有发生这种情况,而且在Windows Phone 8.1中没有这种情况。

我一直在网上搜索解决方案几个小时,但我找不到任何相关内容。

有谁知道为什么会发生这种情况? 我希望我对我的问题很清楚。

提前感谢您的回答。

1 个答案:

答案 0 :(得分:2)

您观察到的行为是正确的并且符合预期。您有两种选择:

您可以使用Page.NavigationCacheMode,将其设置为Required。这很容易,但可能会占用大量内存。

或者您可以在OnNavigatedFrom中保存页面状态,并在OnNavigatedTo中将其恢复。实际上,根据您的场景,甚至可能不需要在OnNavigatedFrom中保存状态,假设在返回页面时可以构造状态(您的DataContext),就像您在第一次进入页面时构造它一样。