2011-10-22 77 views
2

我有问题,我似乎无法解决。我使用MEF和Prism4创建了一个测试项目。我创建了一个测试项目,其中有两个视图,每个视图都在一个区域内注册,另一个区域也是一个按钮。当点击按钮时,我希望将视图更改为正确的视图。我认为错误的代码在下面,任何人有任何想法我在这里做错了吗?激活棱镜区域的视图

public void Initialize() 
    { 
     regionManager.RegisterViewWithRegion(RegionNames.MainRegion, typeof(Views.Module1View)); 

     Button button = new Button() { Content = "Module1" }; 
     button.Click += (o, i) => 
     { 
      var region = this.regionManager.Regions[RegionNames.MainRegion]; 
      if (region != null) 
      { 
       region.Activate(typeof(Views.Module1View)); 
      } 
     }; 

     regionManager.AddToRegion(RegionNames.NavigationRegion, button); 
    } 

我得到以下错误...

The region does not contain the specified view. 
Parameter name: view 

回答

1

解决了这个问题 - 什么惊人良好的睡眠会做!我必须从ServiceLocator获取视图。

public void Initialize() 
    { 
     regionManager.RegisterViewWithRegion(RegionNames.MainRegion,() => 
      ServiceLocator.Current.GetInstance<Views.Module2View>()); 

     Button button = new Button() { Content = "Module2" }; 
     button.Click += (o, i) => 
     { 
      var view = ServiceLocator.Current.GetInstance<Views.Module2View>(); 

      var region = this.regionManager.Regions[RegionNames.MainRegion]; 
      if (region != null) 
      { 
       region.Activate(view); 
      }    
     }; 

     regionManager.AddToRegion(RegionNames.NavigationRegion, button); 
    } 
+1

您不必从ServiceLocator获取视图。你也可以使用region.GetView(regionName) – PVitt

+0

优秀!它也解决了我的问题。我的投票+1 – imdadhusen