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在满足我的新视图的导入时创建新的对象?
当您导出一部分,默认情况下它使用CreationPolicy的Shared.这实际上使导出的实例成为容器中的单例.在导出时,添加另一个属性:
[Export, PartCreationPolicy(CreationPolicy.NonShared)]
public class Foo { }
Run Code Online (Sandbox Code Playgroud)
这将确保每次调用组合使用者实例时都会创建一个新实例.