/ / получите няколко същите изгледи от приставката MEF по начин mvvm - wpf, mvvm, mef

получавате няколко същите изгледи от приставката на MEF по начин mvvm - wpf, mvvm, mef

Аз се опитвам да се разработи софтуерен модул за приставки MEF, използвайте notepad ++ като пример, всеки раздел ще покаже изглед, който е импортиран от всяка приставка.

Следният интерфейс би осигурил едно копие на ConfigView след композицията на MEF. но как да създадете няколко копия на ConfigView?

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

-------- Възможно решение ---------------------------------------- ----------------------------

Всъщност, аз се опитвам да го използвам в AvalonDock и открих, че avalonDock се нуждае от данниTemplate, за да създаде множество гледки. По този начин само плъгините трябва да предоставят един шаблон за данни за изгледи.

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 за отговор № 1

Просто съхранявайте няколко изгледа, вместо една ... Можете да запазите списък или FrameworkElement [] въз основа на това дали искате да създадете нови динамично или не

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