Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Win8 Metro应用程序中的“后退”按钮后保留DataContext更改_C#_Wpf_Xaml_Microsoft Metro_Windows Runtime - Fatal编程技术网

C# 在Win8 Metro应用程序中的“后退”按钮后保留DataContext更改

C# 在Win8 Metro应用程序中的“后退”按钮后保留DataContext更改,c#,wpf,xaml,microsoft-metro,windows-runtime,C#,Wpf,Xaml,Microsoft Metro,Windows Runtime,我正在构建Windows 8应用程序C/XAML并使用Frame.Navigate属性在页面之间移动。每个页面都有一个AppBar图标,该图标将刷新页面上的数据,并设置DataContext属性。这是可行的,按下按钮后UI会相应更新 当我导航到另一个页面,然后单击后退箭头返回到上一个页面时,就会出现我看到的问题 当OnNavigatedToNavigationEventArgs e方法在单击后退箭头后运行时,e.参数值为和旧值,在我单击刷新按钮之前,DataContext已更新 除了使用Fram

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

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

当OnNavigatedToNavigationEventArgs e方法在单击后退箭头后运行时,e.参数值为和旧值,在我单击刷新按钮之前,DataContext已更新

除了使用Frame.NavigatetypeofPageTypeName,paramValue;,我不知道如何更新参数值;,但我不想启动导航操作

我的问题有两个方面

如何持久化DataContext更改,以便在返回页面时,通过OnNavigatedToNavigationEventArgs方法中的e.参数公开我设置的值

是否有某种参考度量来解释Win8应用程序中的导航生命周期

。。。或者我应该用另一种方式来做吗?

我找到了解决办法

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

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


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

为什么不更改数据而不是DataContext?重新绑定时,数据可能会完全不同。我没有改变DataContext,而是将新数据绑定到它。数据的结构没有改变,只是值本身。DataContext表示结构,即:模型及其数据是变化的。好的,但我仍然没有解决OnNavigatedToNavigationEventArgs e事件的解决方案,该事件为我提供旧数据,特别是在运行上一页上的Frame.NavigateTypeOpageTypeName、paramValue时设置的e.参数值。我需要确保当我在DataContext中更新数据时,数据也会在那里更新,或者当我按下“后退”按钮时,数据总是过时的。也许我应该问一个不同的问题。e.参数的值从何而来?我如何更新它?