Перезагрузка страницы после GoBack или GoForward

У меня имеются одно главное окно с элементом frame и две страницы, на которых может что-либо поменяться в зависимости от действий пользователя (нажать на кнопку и изменить её цвет, ввести в textbox какое-либо значение и т.д.). Есть так же две кнопки на главном окне, отвечающие за переход назад и вперёд по элементу frame.

Столкнулся с такой проблемой, что если я перехожу на вторую страницу, а затем по кнопке назад возвращаюсь на первую, то на первой странице изменённые поля и кнопки остаются с теми же изменениями.
Как можно сделать так, чтобы после нажатия на кнопку назад или вперёд страница загружалась заново?

На данный момент я использую следующий код:

// Код главного окна
// Кнопка главного окна для перехода на первую страницу
private void page1Button_Click(object sender, RoutedEventArgs e)
{
    frame.NavigationService.Navigate(new Page1());
}

// Кнопка главного окна для перехода на вторую страницу
private void page2Button_Click(object sender, RoutedEventArgs e)
{
    frame.NavigationService.Navigate(new Page2());
}

// Кнопка главного окна для перехода назад
private void backButton_Click(object sender, RoutedEventArgs e)
{
    if (frame.CanGoBack == true)
    {
        frame.NavigationService.GoBack();
    }
}

// Кнопка главного окна для перехода вперёд
private void forwardButton_Click(object sender, RoutedEventArgs e)
{
    if (frame.CanGoForward == true)
    {
        frame.NavigationService.GoForward();
    }
}

Ответы (1 шт):

Автор решения: aepot

Не использовать .GoBack();, а использовать Navigate с типом страницы из истории.

Например вот таким костылем.

if (frame.CanGoBack)
{
    var type = frame.BackStack.First().GetType();
    frame.NavigationService.RemoveBackEntry();
    var newPage = Activator.CreateInstance(type);
    frame.NavigationService.Navigate(newPage);   
}

А вот с переходом вперед такая штука не полностью прокатит, потому что метода NavigationService.RemoveForwardEntry() не существует. Возможно если подцепиться к журналу переходов напрямую, то что-то из этого получится, но я не уверен.

А по-хорошему надо менять код страницы и делать так чтобы она перезагружала данные при показе, только и всего, и не придется мучать фрейм.

→ Ссылка