在Win8 Metro应用程序中的后退按钮后保持DataContext更改

时间:2012-04-15 00:13:51

标签: c# wpf xaml microsoft-metro windows-runtime

我正在构建Windows 8应用程序(C#/ XAML)并使用Frame.Navigate()属性在页面之间移动。每个页面都有一个AppBar图标,用于刷新页面上的数据,并设置DataContext属性。这是有效的,按下按钮后UI会相应更新。

当我导航到另一个页面时,我看到的问题出现了,然后单击后退箭头返回上一页。

OnNavigatedTo(NavigationEventArgs e)方法运行时(单击后退箭头后),e.Parameter值为旧值(在我单击刷新按钮之前,DataContext已更新)。

除了使用Frame.Navigate(typeof(PageTypeName), paramValue);之外,我不知道如何以任何其他方式更新参数值,但我不想发起导航操作。

我的问题有两个。

  1. 如何保留DataContext更改,以便在我返回页面时,我设置的值会通过e.Parameter方法中的OnNavigatedTo(NavigationEventArgs e)公开。

  2. 是否有某种参考机制解释了Win8应用中的导航生命周期?

  3. ......或者我应该以不同的方式做这件事吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Required;

这告诉框架它应该始终缓存我的页面的旧实例,而不是在我导航回它时创建一个新实例。

这样,当我返回页面时,我的新DataContext值不会被覆盖。