Prism / MEF新视图没有从MEF导入获取新的视图模型

时间:2011-03-30 10:06:55

标签: prism mef viewmodel

我有一个标签式应用程序,我希望用户能够搜索某个人,然后在新视图中显示该人的详细信息。用户应该能够为不同的人打开多个人员详细信息视图。

我有点不确定我是否遵循了创建新视图的正确程序。使用Unity(我不是),似乎你会调用Container.Resolve(view)但是我正在执行以下操作,为了在视图/视图模型中创建导入,必须使用satisfyImports。

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在完成新视图的导入时创建新的对象?

1 个答案:

答案 0 :(得分:6)

导出零件时,默认使用CreationPolicy Shared。这实际上使导出的实例成为容器中的单例。在导出后,添加另一个属性:

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

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