根据我的理解,导航与ScopedRegions不会棱镜的直线前进功能。然而,发布了一些解决方法,以便以相当简单的方式实现它。
你可以看看下面的帖子和讨论线程处理ScopeRegionManagers跨越导航:
基本上,奥古斯丁阿达米的提议将获得范围RegionManager f ROM中的Region.Add()方法,通过NavigationResult从RequestNavigate()方法在导航回调通过。
导航调用随后将如下所示:
this.regionManager.RequestNavigate("MainRegion",
new Uri("HelloWorldView?createRegionManagerScope=true", UriKind.Relative),
(result) =>
{
var myRegionManager = result.ExtractRegionManager();
myRegionManager.RequestNavigate("NestedRegion", new Uri("View1", UriKind.Relative));
});
UPDATE:
一个用于设置范围的RegionManager到孩子视图模型将是可能的方法使用共享服务并获得范围RegionManager从那里。
的主视图模型将存储RegionManager如下:
...
bool createRegionManagerScope = true;
var scopedRegionManager = region.Add(view, null, createRegionManagerScope);
var dictionary = ServiceLocator.Current.GetInstance<ScopedRegionManagersSharedDictionary>();
dictionary[Names.ScopedRegionManagerName] = scopedRegionManager;
this.regionManager.RequestNavigate(Names.MainRegion,
new Uri("HelloWorldView", UriKind.Relative));
然后,孩子视图模型应该实现INavigationAware为了中检索并设置范围的RegionManager上如下所示:OnNavigatedTo()方法如下所示:
void OnNavigatedTo(NavigationContext navigationContext)
{
var dictionary = ServiceLocator.Current.GetInstance<ScopedRegionManagersSharedDictionary>();
this.regionManager = dictionary[Names.ScopedRegionManagerName];
...
}
我希望这可以帮助,关心。
我还是有点困惑。孩子viewmodel实例(我们刚刚导航到的)将如何接收本地/作用域RegionManager,从而允许它执行自己的导航? 从外观上看,启动导航到子项的主ViewModel接收范围区域管理器,因此执行另一个导航请求到宏子Viewmodel。 那么困惑。 – Klue
此实现将导航到_ **嵌套区域** _中的预定义**视图**。如果您想要从子View ** ViewModel **管理导航,则可以将** Scoped RegionManager **存储到**共享服务**上的** _ Dictionary _ **中,并且在导航到子级时* * ViewModel **您可以从** _ OnNavigatedTo()_ **方法的字典中检索** Scoped RegionManager **引用。我更新了答案以显示其他方法。 – GOstrowsky