WPF 导航服务"RemoveBackEntry"将删除最旧的条目,而不是最新的条目



我有一个相当简单的WPF应用程序,上面有少数页面。提交表格后,我想导航到特定页面,然后清除最后的导航条目,以便用户无法重新提交刚刚提交的表格。

但是,当我在导航到特定页面后的导航服务上调用" removebackentry()"时,它会在后堆栈中删除3rd条目(在这种情况下是最古老的),而不是我正在导航的页面从。当新页面加载时,该页面仍然是后堆中的最新条目。

这是我的代码,尽管它非常简单明了。

  public void NavigateToNewWorkPage()
    {
        _view.NavigationService?.Navigate(new WorkPage());
        _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;
}

您等待导航事件,以便从您导航的视图成为最后一个后备条目,然后将其删除。

我没有尝试过,但是您可以尝试将呼叫循环到RemoveBackEntry()吗?例如

public void NavigateToNewWorkPage()
{
    _view.NavigationService?.Navigate(new WorkPage());
    while(_view.NavigationService?.CanGoBack == true)
    {
        _view.NavigationService?.RemoveBackEntry();
    }
}

相关内容

  • 没有找到相关文章

最新更新