2011-03-28 65 views
3

我有一個視圖模型,其中包含一個命令,我想將新視圖添加到我的shell的MainRegion(一個選項卡控件)。如何使用視圖模型中的Mef容器來解析視圖

似乎是我需要使用視圖注入而不是發現是好的。

即從棱鏡文檔

IRegionManager regionManager = ...; 
IRegion mainRegion = regionManager.Regions["MainRegion"]; 
NewView view = this.container.Resolve<NewView>(); 
mainRegion.Add(view); 

如何和我在哪裏,以解決NewView的得到我的視圖模型的CompositionContainer中的參考?

謝謝。

回答

-1

這個question與您的實際上是一樣的。

+1

感謝。我看到你展示的例子是使用統一容器。我正在使用MEF。只是想知道什麼時候在我的容器上設置導出。目前我不會覆蓋引導程序中的createcontainer/configurecontainer方法... – obaylis 2011-03-28 14:02:05

+0

@obaylis - 您需要重寫CreateContainer,如[here](http://www.garrettgirod.com/?p=173)(最後)。 – CodeNaked 2011-03-28 14:07:43

+0

謝謝。我從我的引導程序中導出了CompositionContainer。導出需要是靜態的才能工作。完成之後,我可以在我的視圖模型中導入CompositionContianer。 – obaylis 2011-03-29 15:15:31

4

默認的MEF容器通過IServiceLocator自行導出。您可以導入的服務定位和區域經理在您的視圖模型:

[Import] 
private IRegionManager _regionManager; 

[Import] 
private IServiceLocator _serviceLocator; 

然後用它來查看注:

public void ShowSomeView() 
{ 
    IRegion region = _regionManager.Regions["Main"]; 
    var view = _serviceLocator.GetInstance(typeof(SomeView)); 
    region.Add(view, "SomeView"); 
    region.Activate(view); 
} 
+2

這應該是被接受的答案。 – glebd 2014-08-08 10:30:01