2011-10-14 44 views
1

我有一個由視圖模型(使用MEF)控制的視圖,允許用戶從下拉列表中選擇項目。用戶選擇的每個項目都會填充定義爲區域的選項卡控件。視圖模型實例化視圖,賦予它一個視圖模型,然後將其添加到區域:添加視圖不會調用MEF導入語句

ProjectDetailView view = new ProjectDetailView(); 
ProjectDetailViewModel viewModel = new ProjectDetailViewModel(); 
viewModel.CurrentProject = project; 
view.DataContext = viewModel; 
RegionManager.Regions["SelectedItemsRegion"].Add(view); 

這一切工作正常從UI的觀點。但是,項目詳細視圖模型具有[Import]語句以接收用於發佈事件的EventAggregator。

[Import] 
public IEventAggregator EventAggregator { get; set; } 

因爲我只添加視圖的區域和不是做請求導航到特定URI,該組合物不會發生(或至少它不會出現),因此EventAggregator總是空。我如何獲得這些動態添加的視圖來完成導入所請求的類的過程?有沒有一種組合方法,我可以調用一個特定的視圖,以便事情得到解決?

+0

我最近遇到了同樣的問題。我將我的代碼從RegisterViewWithRegion更改爲.Add,但我發現[導入]不滿意。我也嘗試實現從未調用過的IPartImportsSatisfiedNotification接口。任何人都有這方面的更新? –

回答

0

我會建議你創建一個工廠類實例化EventAggregator,就像這樣:

public EventAggregatorFactory 
{ 
    [Export(typeof(IEventAggregator))] 
    public IEventAggregator Instance 
    { 
     get 
     { 
      return new EventAggregator(); 
     } 
    } 
} 

顯然,移動Export聲明進工廠類。這應該允許在視圖模型被調用時正確實例化EventAggregator的Import