2011-10-22 80 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