2017-02-19 2 views
0

У меня есть довольно простое приложение WPF с несколькими страницами. При отправке формы я хочу перейти к определенной странице, а затем удалить последнюю навигационную запись, чтобы пользователь не смог повторно отправить ту форму, которую они только что отправили.WPF NavigationService «RemoveBackEntry» удаляет самую старую запись, а не последние

Однако, когда я вызываю «RemoveBackEntry()» в навигационной службе после перехода на конкретную страницу, она удаляет 3-ю запись (которая является самой старой в этом случае) в фоновом стеке, а не на странице I отправка из. Эта страница остается самой последней записью в фоновом стеке при загрузке новой страницы.

Вот мой код, хотя это довольно просто и прямолинейно.

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

ответ

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

Ждет случае, переключение поэтому вид навигации от стал последней обратно записью, а затем удалить его.

+0

На самом деле я добавил навигационное событие в мое приложение app.xaml.cs, после чего оно дает мне доступ к стопку назад. Я прокручиваю и удаляю конкретную запись, которую я хочу удалить. Отмечено как ответ, потому что он был самым близким. Благодаря! –

1

Я не пробовал, но вы могли бы попробовать зацикливание вызов RemoveBackEntry()? Например.

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

    while(_view.NavigationService?.CanGoBack == true) 
    { 
     _view.NavigationService?.RemoveBackEntry(); 
    } 
} 
Смежные вопросы