使用默认注册视图进行棱镜导航

时间:2017-11-07 16:40:41

标签: wpf navigation prism

好的,所以我遇到了一个有趣的情况,答案是在逃避我。我有一个用户控件,其中一侧有一个PRISM区域连接到一个控件。我想设置该区域的初始视图,所以在模块内部,我做了类似的事情 _regionManager.RegisterViewWithRegion(StaticRegionNames.RegionName, typeof(firstView))

当我运行该程序时,它显示正常,正如我所期望的那样。现在,在按钮上单击,我使用

将该区域导航到另一个视图
_regionManager.RequestNavigate(
        regionName: StaticRegionNames.RegionName,
        source: new Uri(viewNameToNavigateTo, UriKind.Relative))

这也有效。当我想回到初始视图(firstView)时会出现问题。

我正在尝试类似的事情:

var region = _regionManager.Region[StaticRegionNames.RegionName];
if(region.NavigationService.Journal.CanGoBack)
    retgion.NavigationService.Journal.GoBack();

上面的这个电话不适用于"我只是从默认视图导航到下一个视图",但如果我再次浏览该区域到另一个视图,我就是能够通过此调用返回第二个视图。

调试后,我真的很难过,因为该区域显示它有2个视图,但CanGoBack的值为false。

我尝试了View Injection,但由于模块在区域可见之前加载,因此无法正常工作,因此RegionManager中没有具有该名称的区域。我尝试创建一个,但那似乎没有注册到UserControl的区域。

我也试过了RegisterViewWithRegion的lambda版本,但结果完全一样。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

如果您在PRISM 5指南中查看this topic,可以找到关于此的说明(强调我的):

  

导航日志只能用于基于区域的导航   由区域导航服务协调的操作。如果   您使用查看发现查看注入来实施导航   在某个区域内,导航日志将不会在更新期间更新   导航并不能用于向前或向后导航   该地区。

因此,唯一可行的方法是使用Region的{​​{1}}导航到默认视图。