在我的WP8应用程序中,我的情况是我必须从一个页面导航到另一个页面,然后由于某些原因我需要重新加载同一页面。
MainPage.xaml - > Page1.xaml - > Page1.xaml - >的Page1.xaml
当用户按下反键时,应返回“MainPage.xaml”页面。
我尝试使用NavigationService.navigate()
进行导航,但有些原因我无法重新加载页面。如果我使用导航网址传递任何唯一的查询字符串(例如:Guid),我可以重新加载页面。但是,当我按下后退按钮时 - 它永远不会返回到Mainpage.xaml页面。
有没有最好的方法来实现这个目标?
答案 0 :(得分:5)
每次重新加载页面时都会传入查询字符串(例如随机GUID)。在OnNavigatedTo
方法上检查GUID查询字符串是否存在。如果确实存在,则表示您不希望Navigation Stack
上显示此页面,因为它是重新加载的版本,因此您可以通过调用NavigationService.RemoveBackEntry将其删除。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string guid = string.Empty;
if (NavigationContext.QueryString.TryGetValue("guid", out guid))
{
//guid exists therefore it's a reload, so delete the last entry
//from the navigation stack
if(NavigationService.CanGoBack)
NavigationService.RemoveBackEntry();
}
}
答案 1 :(得分:2)
使用NavigationService.RemoveBackEntry
方法删除上一个导航堆栈条目。
您还可以从导航历史记录中删除所有元素:
while(service.CanGoBack)
service.RemoveBackEntry();
然后添加您感兴趣的那个。
答案 2 :(得分:1)
NavigationService.Navigate(new Uri("/MainPage.xaml?" + DateTime.Now.Ticks, UriKind.Relative));
您可以在控件下使用它来导航到同一页面
答案 3 :(得分:0)
因为我找不到任何关于此问题的Windows 10(通用应用程序UWP UAP)问题,而且这个似乎是谷歌搜索重新加载页面的最佳结果,这里有一个解决方案:
NavigationService.Refresh();
我在我的应用上使用Template 10,所以我不知道这是否重要。 lib将NavigationService封装在自己的INavigationService
中