【问题标题】:Prism INavigationAware methods not called with WPF appWPF 应用程序未调用 Prism INavigationAware 方法
【发布时间】:2026-01-29 20:05:02
【问题描述】:

我们在 WPF 应用程序中使用 Prism 7.2.0.1441-ci。我们有一个问题是 INavigationAware 导航到视图时不会调用方法。我们使用以下代码进行导航。 登录视图已注册。 LoginViewModel 实现了 INavigationAware

    _regionManager.RegisterViewWithRegion(RegionNames.TabRegion, typeof(Login));
    _regionManager.RequestNavigate(RegionNames.TabRegion, ViewNames.Login, parameters);

MainWindow.xaml

       <DockPanel>
            <!-- <Frame x:Name="_mainFrame" NavigationUIVisibility="Hidden" /> -->
          <ContentControl  prism:RegionManager.RegionName="{x:Static core:RegionNames.TabRegion}"  />
          </DockPanel>

此机制在应用程序的另一部分中确实有效,此特定位位于启动代码中,并从 MainWindowViewModel 构造函数中调用。

有什么想法吗?

谢谢

【问题讨论】:

  • 为什么要将视图注册到区域(尝试)导航到它?

标签: wpf prism


【解决方案1】:

此机制在应用程序的另一部分中确实有效,此特定位位于启动代码中,并从 MainWindowViewModel 构造函数中调用。

您无法从 shell 视图模型的构造函数中导航,因为这些区域还不存在。

相反,从OnInitialized 开始进行第一次导航(或让用户单击按钮)。

【讨论】:

  • 导航正常,只是没有调用onNavigatedTo方法
  • 也许是因为它在 createShell 方法中我们得到了一些“效果” 我将如何在 MainWindowViewModel 中使用 OnInitialised 方法,因为这是所有代码所在的地方。非常感谢!
  • 您可以直接从OnInitialized 导航,也可以在MainWindowViewModel 中发起一个事件并订阅它(如果您需要做的不仅仅是导航)