根據我的理解,導航與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