2011-03-30 84 views
3

我有一个选项卡式应用程序,我希望用户能够搜索某个人,然后在新视图中显示该人的详细信息。用户应该能够为不同的人开放多个人员详细信息视图。棱镜/ MEF新视图没有从MEF导入获取新视图模型

我有点不确定我是否按照正确的程序来创建我的新视图。使用Unity(我不是)看起来你会打电话给Container.Resolve(view)但是我正在做以下操作,为了在view/viewmodel中导入我的导入信息,需要使用satisfImports。

PersonDetailView view = new PersonDetailView(); 
_container.SatisfyImportsOnce(view); 
_regionManager.Regions["MainRegion"].Add(view, this.SelectedPerson.Name); 
_regionManager.RequestNavigate("MainRegion", new Uri("PersonDetailView", UriKind.Relative)); 

在我的PersonDetailView的代码中,我有以下属性来设置数据上下文。

[Import] 
public PersonDetailsViewModel ViewModel 
{ 
    set 
    { 
     this.DataContext = value; 
    } 
} 

这似乎是工作,但我有麻烦的是,当我创建第二人称视角,新观点越来越DataContext的作为已创建视图的同一个实例。

这是因为我错误地创建了我的视图还是有一种方式告诉MEF创建一个新的对象,当它完成我的新视图的导入时?

回答

6

当您导出零件时,默认情况下它使用CreationPolicyShared。这基本上使导出的实例成为容器中的单例。通过导出,添加另一个属性:

[Export, PartCreationPolicy(CreationPolicy.NonShared)] 
public class Foo { } 

这将确保每次调用构成消费者实例时都会创建一个新实例。

+0

谢谢,我会给你一个去。 – obaylis 2011-04-01 10:02:19