WPF-Как перезагрузить ту же страницу по щелчку гиперссылки древовидного представления

#wpf

Вопрос:

У меня есть приложение WPF без использования MVVM ,мы пишем код в коде позади,в нем у меня есть древовидное представление с гиперссылками .Я использую следующий код для переключения между страницами

  private void MnuMain_RequestNavigate(object sender, 
    System.Windows.Navigation.RequestNavigateEventArgs e)
{
        this.MainContent.Content = null;
        this.MainContent.Resources.Clear();
        this.MainContent.Navigate(e.Uri, UriKind.RelativeOrAbsolute);
  }
 

MainContent-это фрейм, в котором я показываю страницу с кликами

При нажатии на страницу код проходит через указанные выше строки, а затем переходит в конструктор страницы, где вызывается InitializeComponent ().Однако при повторном нажатии на ссылку конструктор на выбранной странице не вызывается.Я хочу перезагрузить страницу по щелчку той же ссылки ,как это делается в веб-формах.Страница перезагружается ,если я переключаюсь между страницами, но если я нажимаю на ту же ссылку, она не перезагружается.

Ответ №1:

Я нашел решение ,которое мы должны использовать в приведенном ниже коде, который снова вызовет конструктор страницы

 this.MainContent.NavigationService.Refresh();
 

но это не сработает, если мы будем следовать ему с this.MainContent.Navigate(e.Uri, UriKind.RelativeOrAbsolute);

итак, чтобы решить эту проблему

-В конструкторе создайте свойство, которое будет использоваться для хранения последней нажатой ссылки

 App.Current.Properties["lastclickedlink"] = "";
 

затем

     private void MnuMain_RequestNavigate(object sender, 
        System.Windows.Navigation.RequestNavigateEventArgs e)
    {
                      this.MainContent.Content = null;
                    this.MainContent.Resources.Clear();
    
                    if (App.Current.Properties["lastclickedlink"].ToString() == e.Uri.ToString())
                    {
                        this.MainContent.NavigationService.Refresh();
                    }
                    else
                    {
                        this.MainContent.Navigate(e.Uri, UriKind.RelativeOrAbsolute);
                                         
                    }
 App.Current.Properties["lastclickedlink"] = e.Uri.ToString();
    }