2014-02-11 47 views
0

发现了试图与棱镜的导航API夫妇范围区域功能的几个例子,但我不太明白,我怎么可以把这个一起使用视图模型,第一种方法与隐含的数据模板 - 每个包装一个UserControl。棱镜 - 视图模型,首先,导航API,与作用域地区

我的一些UserControls被包装在多个DataTemplates中。这些用户控件指定他们自己的区域。

我的主要缺点,是我没有能力把握它是如何可能的导航请求时抢本地RegionManager的参考。如何在需要时通知Prism创建范围区域,并在启动导航请求的子ViewModel的构造函数中导入本地RegionManager实例?

任何帮助?

回答

3

根据我的理解,导航ScopedRegions不会棱镜的直线前进功能。然而,发布了一些解决方法,以便以相当简单的方式实现它。

你可以看看下面的帖子和讨论线程处理ScopeRegionManagers跨越导航

基本上,奥古斯丁阿达米的提议将获得范围RegionManager f ROM中的Region.Add()方法,通过NavigationResultRequestNavigate()方法在导航回调通过。

导航调用随后将如下所示:

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]; 
    ... 
} 

我希望这可以帮助,关心。

+0

我还是有点困惑。孩子viewmodel实例(我们刚刚导航到的)将如何接收本地/作用域RegionManager,从而允许它执行自己的导航? 从外观上看,启动导航到子项的主ViewModel接收范围区域管理器,因此执行另一个导航请求到宏子Viewmodel。 那么困惑。 – Klue

+0

此实现将导航到_ **嵌套区域** _中的预定义**视图**。如果您想要从子View ** ViewModel **管理导航,则可以将** Scoped RegionManager **存储到**共享服务**上的** _ Dictionary _ **中,并且在导航到子级时* * ViewModel **您可以从** _ OnNavigatedTo()_ **方法的字典中检索** Scoped RegionManager **引用。我更新了答案以显示其他方法。 – GOstrowsky