Prism区域中同名不同命名空间视图的导航方法问询
解决Prism中同名不同命名空间视图的导航问题
这个场景我在模块化Prism项目里碰过好多次,默认只传视图名称的RequestNavigate确实搞不定同名不同命名空间的视图,不过不用改视图名,有两个简单靠谱的方案:
方案1:直接使用视图的Type进行导航(推荐)
Prism的RequestNavigate提供了接受Type参数的重载,每个视图的Type是唯一的,不管类名是否重复,都能精准定位到目标视图。
代码示例:
// 导航到A.B.C.Something下的RootView _regionManager.RequestNavigate(RegionsNames.MainSections, typeof(A.B.C.Something.RootView)); // 导航到A.B.C.SomethingElse下的RootView _regionManager.RequestNavigate(RegionsNames.MainSections, typeof(A.B.C.SomethingElse.RootView));
这个方案的好处是类型安全,编译时就能发现错误,不用怕字符串拼写错,而且代码可读性极强,一眼就能看出要导航到哪个模块的视图。
方案2:使用视图的完全限定名称导航
如果更倾向于用字符串导航,可以传递视图的完整限定名(包含命名空间的全路径类名),Prism会根据这个完整名称匹配对应的视图类型。
代码示例:
// 用完全限定名指定要导航的视图 _regionManager.RequestNavigate(RegionsNames.MainSections, "A.B.C.SomethingElseElse.RootView");
注意这里的字符串要和视图Type的FullName完全一致,不然会找不到视图。这个方案适合需要动态拼接导航目标的场景,但要注意避免拼写错误。
额外说明
你之前用RegisterViewWithRegion传入typeof(...)的注册方式是完全正确的,Prism内部会记录每个视图的Type信息,所以上面两个方案都能和你的注册逻辑完美适配,不需要修改任何视图名称或注册代码。
内容的提问来源于stack exchange,提问作者J4N
相关产品推荐
相关产品推荐

