首页 > 解决方案 > WPF-如何在单击树视图超链接时重新加载同一页面

问题描述

我有一个不使用 MVVM 的 WPF 应用程序,我们在后面的代码中编写代码,其中我有一个带有超链接的树视图。我使用以下代码在页面之间交换

 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() 的页面的构造函数。但是,如果再次单击链接,则不会调用单击页面中的构造函数。我想重新加载页面单击相同的链接,就像它在网络表单中的完成方式一样。如果我在页面之间交换,页面会重新加载,但如果我单击相同的链接,它不会重新加载。

标签: wpf

解决方案


我找到了我们必须使用以下代码的解决方案,它将再次调用页面的构造函数

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

推荐阅读