【问题标题】:Prism / MEF new view not getting a new viewmodel from MEF importPrism / MEF 新视图未从 MEF 导入中获取新视图模型
【发布时间】:2011-07-25 23:41:36
【问题描述】:

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

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

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;
   }
} 

这似乎可行,但我遇到的问题是,当我创建第二人称视图时,新视图会获得与已经创建的视图相同的数据上下文实例。

这是因为我创建的视图不正确,还是有办法告诉 MEF 在完成新视图的导入时创建一个新对象?

【问题讨论】:

    标签: prism mef viewmodel


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,我会试一试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多