【问题标题】:How to resolve view using Mef container in a view model [duplicate]如何在视图模型中使用 Mef 容器解析视图 [重复]
【发布时间】:2011-07-24 10:48:02
【问题描述】:

我有一个视图模型,其中包含一个命令,我想在其中向我的 shell 的 MainRegion(一个选项卡控件)添加一个新视图。

似乎我需要使用视图注入而不是发现,这很好。

即来自 prism 文档

IRegionManager regionManager = ...;
IRegion mainRegion = regionManager.Regions["MainRegion"];
NewView view = this.container.Resolve<NewView>();
mainRegion.Add(view);

为了解析 NewView,我如何以及在何处获取对我的视图模型中的 CompositionContainer 的引用?

谢谢。

【问题讨论】:

    标签: wpf mvvm prism mef


    【解决方案1】:

    默认的 MEF 容器通过 IServiceLocator 导出自身。您可以在视图模型中导入服务定位器和区域管理器:

    [Import]
    private IRegionManager _regionManager;
    
    [Import]
    private IServiceLocator _serviceLocator;
    

    然后将其用于视图注入:

    public void ShowSomeView()
    {
        IRegion region = _regionManager.Regions["Main"];
        var view = _serviceLocator.GetInstance(typeof(SomeView));
        region.Add(view, "SomeView");
        region.Activate(view);
    }
    

    【讨论】:

    • 这应该是公认的答案。
    【解决方案2】:

    这个question实际上和你的一样。

    【讨论】:

    • 谢谢。我看到您展示的示例正在使用统一容器。我正在使用 MEF。只是想知道我什么时候在我的容器上设置导出。目前我没有在我的引导程序中覆盖 createcontainer / configurecontainer 方法...
    • @obaylis - 您需要覆盖 CreateContainer,如 here 所示(最后)。
    • 谢谢。我从我的引导程序中导出了 CompositionContainer。导出需要是静态的才能正常工作。完成后,我可以在我的视图模型中导入 CompositionContianer。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多