2011-10-14 27 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