棱镜。当我用RegisterViewWithRegion显示我的视图时,OnNavigationTo不会被触发

时间:2011-08-08 11:48:26

标签: silverlight-4.0 prism

我对OnNavigatedTo界面中的INavigationAware方法有点问题。

当我用RegionManager.RequestNavigate(myRegionName, myViewName)显示我的观点时,
调用OnNavigationTo方法。

但是当我使用RegionManager.RegisterViewWithRegion(myRegionName, typeof(myView))时 我无法得到这种情况,之后,我打电话 RegionManager.RequestNavigate(myRegionName, myViewName2)在我的第二个视图中,我正在调用第一个视图的OnNavigatedFrom方法。

我的问题是:
当我使用OnNavigatedTo时,为什么RegisterViewWithRegion方法未被调用以及如何通知视图?

2 个答案:

答案 0 :(得分:2)

使用区域管理器注册将显示向其注册的第一个视图。它永远不会调用OnNavigatedTo。基本上,为了让它做你想做的事情,你需要“导航”到第一个View,而不需要调用OnNavigatedFrom。要做到这一点:

// Register all your views into the region
// The first View that is registered is automatically activated
regionManager.Regions["myRegionName"].Add(myView);
regionManager.Regions["myRegionName"].Add(myView2);

// Deactivate the View so it doesn't show in the UI
regionManager.Regions["myRegionName"].Deactivate(regionManager.Regions["myRegionName"].ActiveViews.First());

// Now navigate to your first screen
regionManager.RequestNavigate("myRegionName", "myView");

OnNavigatedTo应该被调用一次,OnNavigatedFrom只能在请求导航到另一个View之后被调用。

答案 1 :(得分:0)

要允许视图导航,您必须将其注册为对象,请尝试以下操作:

_container.RegisterType<Object, MainView>("MainView", new TransientLifetimeManager());
_regionManager.RegisterViewWithRegion("MainRegion", () => _container.Resolve<MainView>());

第一行允许您查看导航,而第二行将在创建区域时自动解析视图