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



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

以下接口将在 MEF 组合后提供配置视图的一个实例。但是如何创建配置视图的多个实例?

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

谢谢

只需保留多个视图,而不是一个视图...您可以保留 List 或 FrameworkElement[] 是否基于您是否要动态创建新

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

最新更新