Перезагрузка страницы после 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 шт):
Не использовать .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() не существует. Возможно если подцепиться к журналу переходов напрямую, то что-то из этого получится, но я не уверен.
А по-хорошему надо менять код страницы и делать так чтобы она перезагружала данные при показе, только и всего, и не придется мучать фрейм.