以mvvm方式从MEF插件获取多个相同的视图

时间:2014-02-12 20:55:04

标签: wpf mvvm mef

我正在尝试开发MEF插件软件,以notepad ++为例, 每个选项卡将显示从每个插件导入的视图。

以下界面将在MEF组合后提供一个ConfigView实例。 但是如何创建ConfigView的多个实例?

public interface IPluginA:IPlugin {
    // View, user control
    FrameworkElement CongfigView { get; }
}

--------可能的解决方案------------------------------------- -------------------------------

实际上,我试图在AvalonDock中使用它,并发现avalonDock需要dataTemplate来创建多个 观点。这样,插件只需要提供一个视图数据模板。

internal class PanesTemplateSelector : DataTemplateSelector {


    private DataTemplate _fileViewTemplate;
    public DataTemplate FileViewTemplate {
        get {
            return _fileViewTemplate;
        }
        set { _fileViewTemplate = value; }
    }

    public DataTemplate FileStatsViewTemplate {
        get;
        set;
    }


    public PanesTemplateSelector() {
        // convert from usercontrol to data template
        FrameworkElementFactory factory = new FrameworkElementFactory(typeof(FileView));
        DataTemplate dt = new DataTemplate();
        dt.VisualTree = factory;

        _fileViewTemplate = dt;
    }

    public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container) {

        var itemAsLayoutContent = item as LayoutContent;

        if (item is FileViewModel)
            return FileViewTemplate;

        if (item is FileStatsViewModel)
            return FileStatsViewTemplate;

        return base.SelectTemplate(item, container);
    }
}

由于

1 个答案:

答案 0 :(得分:1)

只保留多个视图,而不是一个...如果要动态创建新视图,可以保留List或FrameworkElement []

public interface IPluginA:IPlugin {
    // View, user control
    IList<FrameworkElement> CongfigViews { get; }
}