在UWP中导航回帧(SplitView)时丢失DataContext
本文关键字:DataContext SplitView UWP 导航 | 更新日期: 2023-09-27 18:29:14
我正在用C#为Windows 10编写一个通用应用程序,使用带有导航框架的SplitView。我有一个侧边栏,里面有一个我动态加载的列表,当我点击其中一个项目时,我会使用菜单中的模型导航到一个页面,以指示我应该在框架中加载哪个项目。
我遵循了这个示例:Windows通用示例/samples/XamlNavigation/
唯一的区别是,我没有多个页面,而是每次选择具有特定ViewModel的不同项目时,只加载一个页面。我使用Autofac加载ViewModels,使用MyFrame.Navigate(typeof(DetailsPage), idOfItem);
加载页面。
问题是,每次我导航到下一页时,上一页的实例似乎都丢失了,当我导航回来时,它会加载一个新实例。当我在RootFrame中导航时,这种事情似乎不会发生,在Windows Phone 8.1中也不会发生。
我已经在网上搜索了几个小时的解决方案,但找不到任何相关的东西。
有人知道为什么会发生这种事吗?我希望我的问题足够清楚。
提前谢谢你的回答。
您观察到的行为是正确的,正如预期的那样。你有两个选择:
您可以使用Page.NavigationCacheMode,将其设置为Required
。这很容易,但可能会消耗大量内存。
或者,您可以将页面状态保存在OnNavigatedFrom中,然后将其恢复到OnNavigatedTo中。事实上,根据您的场景,甚至可能没有必要将状态保存在OnNavigatedFrom中,假设状态(您的DataContext)可以在返回页面时以与首次合并页面时相同的方式构建。