我正在尝试开发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);
}
}
由于
答案 0 :(得分:1)
只保留多个视图,而不是一个...如果要动态创建新视图,可以保留List或FrameworkElement []
public interface IPluginA:IPlugin {
// View, user control
IList<FrameworkElement> CongfigViews { get; }
}