2014-02-18 258 views
2

我使用2個視圖的一個區域。我有一個ComboBox,讓用戶選擇區域中的視圖。區域激活和區域RequestNavigate有什麼區別?

我有2個問題:

第一個問題是什麼之間的區別:

_regionManager.Regions.Add("MyRegion") 
_regionManager.Regions["MyRegion"].Add(container.Resolve<OneView>()) 
_regionManager.Regions["MyRegion"].Add(container.Resolve<SecondView>()) 

要:

_regionManager.RegisterViewWithRegion("MyRegion",() => container.Resolve<OneView>()); 
_regionManager.RegisterViewWithRegion("MyRegion",() => container.Resolve<SecondView>()); 

和我的第二個問題是,是什麼區別:

_regionManager.Regions["MyRegion"].ActiveViews.ForEach(view => _region.Deactivate(view)); 
_regionManager.Regions["MyRegion"].Activate(container.Resolve<SecondView>()); 

收件人:

_regionManager.Regions["MyRegion"].RequestNavigate(new Uri("SecondView", UriKind.Relative)); 

在此先感謝。

回答

5

你提到的將是RegisterViewWithRegion()方法激活的過程結束註冊查看而第一隻執行增加了意見第一比較的差異。 這RegisterViewWithRegion()方法被稱爲查看發現

MSDN棱鏡指南

有用信息:

您可能會昨天發現在以下職位的相關答案由您對於第二個比較,這取決於地區類型。第一次執行只會激活SecondView。然而,RequestNavigate()可能不若地區的ItemsControl類型取消激活以前查看。一個ItemsControl Region讓你附加很多Views所以你可以有多個活動查看

如果是這樣的情況下,SecondView將在地區出現低於以前的活動查看。但是,如果你不希望這種行爲,你有兩個選擇:

  1. 充分利用地區類型爲ContentControl中,所以只有一個視圖將在時間顯示;
  2. 停用先前視圖OnNavigatedFrom()方法內。您需要使以前的查看繼承自INavigationAware

有用的信息有關RequestNavigate()MSDN棱鏡指南導航

我希望這可以幫助,關心。