我正在尝试开发一个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; }
}