2014-02-18 65 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棱镜指南导航

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