WPF NavigationService“RemoveBackEntry”正在删除最旧的条目,而不是最近的

时间:2017-02-19 21:25:42

标签: c# wpf navigation navigationservice

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

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

这是我的代码,虽然它非常简单直接。

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

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,并使用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事件,以便您导航的视图成为最后一个条目,然后将其删除。

答案 1 :(得分:1)

我还没有尝试过,但您可以尝试将呼叫循环到RemoveBackEntry()吗? E.g。

public void NavigateToNewWorkPage()
{
    _view.NavigationService?.Navigate(new WorkPage());

    while(_view.NavigationService?.CanGoBack == true)
    {
        _view.NavigationService?.RemoveBackEntry();
    }
}