2014-02-11 80 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