WPF NavigationService "RemoveBackEntry" 正在删除最早的条目,而不是最近的条目
WPF NavigationService "RemoveBackEntry" is removing the oldest entry, rather than the most recent
我有一个相当简单的 WPF 应用程序,只有几个页面。
提交表单后,我想导航到特定页面,然后清除最后一个导航条目,以便用户无法重新提交他们刚刚提交的表单。
但是,当我在导航到特定页面后在导航服务上调用 "RemoveBackEntry()" 时,它会删除后退堆栈中的第 3 个条目(在本例中是最旧的条目)而不是页面 I' m 导航自。当新页面加载时,该页面仍然是返回堆栈中的最新条目。
这是我的代码,尽管它非常简单直接。
public void NavigateToNewWorkPage()
{
_view.NavigationService?.Navigate(new WorkPage());
_view.NavigationService?.RemoveBackEntry();
}
我还没试过,但你能试试循环调用 RemoveBackEntry()
吗?例如
public void NavigateToNewWorkPage()
{
_view.NavigationService?.Navigate(new WorkPage());
while(_view.NavigationService?.CanGoBack == true)
{
_view.NavigationService?.RemoveBackEntry();
}
}
我遇到了同样的问题,并使用 NavigationService
提供的事件解决了它。
NavigationService.Navigate(..)
方法是异步的,当您调用 RemoveBackEntry()
时,您当前的视图还不在后台条目日志中。因此,您删除了导航前最后一个返回条目的视图。你可以这样解决:
public void NavigateToNewWorkPage()
{
if (_view.NavigationService != null)
{
_view.NavigationService.Navigated += NavServiceOnNavigated;
_view.NavigationService.Navigate(new WorkPage());
}
}
private void NavServiceOnNavigated(object sender, NavigationEventArgs args)
{
_view.NavigationService.RemoveBackEntry();
_view.NavigationService.Navigated -= NavServiceOnNavigated;
}
您等待 Navigated 事件,以便您导航的视图成为最后一个返回条目,然后您将其删除。
我有一个相当简单的 WPF 应用程序,只有几个页面。 提交表单后,我想导航到特定页面,然后清除最后一个导航条目,以便用户无法重新提交他们刚刚提交的表单。
但是,当我在导航到特定页面后在导航服务上调用 "RemoveBackEntry()" 时,它会删除后退堆栈中的第 3 个条目(在本例中是最旧的条目)而不是页面 I' m 导航自。当新页面加载时,该页面仍然是返回堆栈中的最新条目。
这是我的代码,尽管它非常简单直接。
public void NavigateToNewWorkPage()
{
_view.NavigationService?.Navigate(new WorkPage());
_view.NavigationService?.RemoveBackEntry();
}
我还没试过,但你能试试循环调用 RemoveBackEntry()
吗?例如
public void NavigateToNewWorkPage()
{
_view.NavigationService?.Navigate(new WorkPage());
while(_view.NavigationService?.CanGoBack == true)
{
_view.NavigationService?.RemoveBackEntry();
}
}
我遇到了同样的问题,并使用 NavigationService
提供的事件解决了它。
NavigationService.Navigate(..)
方法是异步的,当您调用 RemoveBackEntry()
时,您当前的视图还不在后台条目日志中。因此,您删除了导航前最后一个返回条目的视图。你可以这样解决:
public void NavigateToNewWorkPage()
{
if (_view.NavigationService != null)
{
_view.NavigationService.Navigated += NavServiceOnNavigated;
_view.NavigationService.Navigate(new WorkPage());
}
}
private void NavServiceOnNavigated(object sender, NavigationEventArgs args)
{
_view.NavigationService.RemoveBackEntry();
_view.NavigationService.Navigated -= NavServiceOnNavigated;
}
您等待 Navigated 事件,以便您导航的视图成为最后一个返回条目,然后您将其删除。