WPF:第二次页面访问后 NavigationService 为 NULL

Posted

技术标签:

【中文标题】WPF:第二次页面访问后 NavigationService 为 NULL【英文标题】:WPF: NavigationService is NULL after 2nd page visit 【发布时间】:2010-11-26 21:26:09 【问题描述】:

场景:

我有一个这样的 NavigationWindow 样式:

<Style TargetType="NavigationWindow" x:Key="x:Type NavigationWindow">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="NavigationWindow" >
                    ...
</Style>

我通过加载一个名为 Home.xaml 的页面来启动我的应用程序。 在 Home.xaml 中,我有一个按钮可以导航到另一个名为 PersonalData 的页面:

private void btnNewUser_Click(object sender, System.Windows.RoutedEventArgs e)

    PersonalData personalData = new PersonalData();
    this.NavigationService.Navigate(personalData);

这可以正常工作,并且会加载个人数据页面。 在第二页上,我有一个“主页”按钮,可以导航回主页:

    private void btnHome_Click(object sender, System.Windows.RoutedEventArgs e)
    
        Home home = new Home();
        this.NavigationService.Navigate(home);
    

我在这里使用“导航”是因为我也想在以后的表单中重复使用该按钮,以便始终拥有一个通向起始页的按钮。

所以这也有效并且主页被加载。我什至可以再次点击那里的 btnNewUser,PersonalData 页面会毫无问题地打开。

但是,当我第二次单击“主页”按钮时,出现“this.NavigationService”为空的错误..

我刚开始使用 WPF,我不知道从哪里开始解决这个问题。有人吗?

【问题讨论】:

【参考方案1】:

在您的 Page 上尝试 KeepAlive=True(对于那些将使用 NavigationService 的用户)。

出现此问题的原因是,在您导航到其他页面后,正在释放 NavigationService 以节省更多内存。

Reference - Page Lifetime and the Journal

【讨论】:

以上是关于WPF:第二次页面访问后 NavigationService 为 NULL的主要内容,如果未能解决你的问题,请参考以下文章

如果用户第二次访问域,则反应不同

短学期第二次心得

在使用ItemContainerGenerator进行自定义时,WPF ComboBox在第二次打开之前不会更新项目

第二次推送视图控制器xamarin ios后需要触摸以与tableview交互

发布后,每个页面第一次打开都很卡,50秒或更长,第二次打开就很快了

jquery-ui datepicker插件在页面第二次点击时无效的问题