我有一个标签式应用程序,我希望用户能够搜索某个人,然后在新视图中显示该人的详细信息。用户应该能够为不同的人打开多个人员详细信息视图。
我有点不确定我是否遵循了创建新视图的正确程序。使用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在完成新视图的导入时创建新的对象?
答案 0 :(得分:6)
导出零件时,默认使用CreationPolicy
Shared
。这实际上使导出的实例成为容器中的单例。在导出后,添加另一个属性:
[Export, PartCreationPolicy(CreationPolicy.NonShared)]
public class Foo { }
这将确保每次调用撰写消费者实例时都会创建一个新实例。