Prism请求导航到新视图

3
我正在使用带有autofac的WPF Prism 6,并且在视图之间导航时遇到了问题。我拥有一个视图,只想在离开它之前保持其活动状态,下次导航到它时,我想创建此视图的新版本。
加载时,我注册了一个IModule,其中包含以下代码:
_regionManager.RegisterViewWithRegion(RegionNames.MainRegion, 
                                      typeof(DxfDisplay.Views.DxfDisplay));

这将注册我的视图,并在初始加载时工作。我在视图模型上实现了INavigationAwareIRegionMemberLifetime接口,并使用public bool KeepAlive => false;实现了IRegionMemberLifetime,以便在完成后处理视图的释放。

当我导航离开此视图时一切正常,但是当我尝试使用导航到达该视图时

_regionManager.RequestNavigate(RegionNames.MainRegion, 
                               new Uri("DxfDisplay", UriKind.Relative), parameters);

视图未打开,且视图模型构造函数未被调用。为了正确实现导航,我需要重新向区域注册视图。或者,如果我将 KeepAlive 更改为 true,则可以返回到原始视图,但如果 INavigationAware.IsNavigationTarget 返回 false,则无法生成新的视图。
我的问题是,如何以这样的方式向区域管理器注册视图,以便在调用 _regionManager.RequestNavigate 时,它将创建视图的一个新实例并显示它。我觉得我可能错过了一些简单的东西,只是忽略了它。
2个回答

3

_builder.RegisterTypeForNavigation<DxfDisplay.Views.DxfDisplay>();


谢谢,我从来没有看过扩展方法命名空间。我知道这一定很容易。 - Cameron Hurst

0
在 Prism 7 中,这现在被称为 RegisterForNavigation<T>() 并存在于 IContainerRegistry 接口上。
例如,在您的模块中:
public class MyModule : IModule
{
    public void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<MyView>();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接