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

oba*_*lis 3 prism mef viewmodel

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

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

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

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

[Import]
public PersonDetailsViewModel ViewModel
{
   set
   {
       this.DataContext = value;
   }
} 
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但我遇到的麻烦是,当我创建第二人称视图时,新视图获取与已创建的视图相同的datacontext实例.

这是因为我正在错误地创建我的观点,还是有一种方法可以告诉MEF在满足我的新视图的导入时创建新的对象?

Mat*_*ott 6

当您导出一部分,默认情况下它使用CreationPolicy的Shared.这实际上使导出的实例成为容器中的单例.在导出时,添加另一个属性:

[Export, PartCreationPolicy(CreationPolicy.NonShared)]
public class Foo { }
Run Code Online (Sandbox Code Playgroud)

这将确保每次调用组合使用者实例时都会创建一个新实例.