C# WPF导航服务“;RemoveBackEntry“;正在删除最旧的条目,而不是最近的条目

C# WPF导航服务“;RemoveBackEntry“;正在删除最旧的条目,而不是最近的条目,c#,wpf,navigation,navigationservice,C#,Wpf,Navigation,Navigationservice,我有一个相当简单的WPF应用程序,只有几个页面。 提交表单后,我希望导航到特定页面,然后清除最后一个导航条目,这样用户就无法重新提交刚刚提交的表单 但是,在导航到特定页面后,当我在导航服务上调用“RemoveBackEntry()”时,它会删除后堆栈中的第三个条目(在本例中是最旧的条目),而不是从中导航的页面。加载新页面时,该页面将保留为后堆栈中的最新条目 这是我的代码,尽管它非常简单和直接 public void NavigateToNewWorkPage() {

我有一个相当简单的WPF应用程序,只有几个页面。 提交表单后,我希望导航到特定页面,然后清除最后一个导航条目,这样用户就无法重新提交刚刚提交的表单

但是,在导航到特定页面后,当我在导航服务上调用“RemoveBackEntry()”时,它会删除后堆栈中的第三个条目(在本例中是最旧的条目),而不是从中导航的页面。加载新页面时,该页面将保留为后堆栈中的最新条目

这是我的代码,尽管它非常简单和直接

  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();
    }
}

我还没有尝试过,但是您可以尝试循环调用
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;
}

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

我遇到了同样的问题,并使用
导航服务提供的事件解决了这个问题

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;
}

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

我实际上在app.xaml.cs中添加了一个导航事件,然后它允许我访问后台堆栈。我旋转并删除我要删除的特定条目。标记你的答案,因为它是最接近的。谢谢实际上,我在app.xaml.cs中添加了一个导航事件,然后它允许我访问后堆栈。我旋转并删除我要删除的特定条目。标记你的答案,因为它是最接近的。谢谢