/ / Ottieni più viste uguali dal plugin MEF in un modo mvvm: wpf, mvvm, mef

ottenere più viste uguali dal plugin MEF in un modo mvvm - wpf, mvvm, mef

Sto cercando di sviluppare un plug-in MEF, usare notepad ++ come esempio, ogni scheda mostrerà una vista importata da ciascun plugin.

la seguente interfaccia fornirebbe un'istanza di ConfigView dopo la composizione MEF. ma come creare più istanze di ConfigView?

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

--------Possibile soluzione---------------------------------------- ----------------------------

In realtà, sto cercando di usarlo in AvalonDock, e ho scoperto che avalonDock ha bisogno di dataTemplate per creare più visualizzazioni. In questo modo, i plug-in devono solo fornire un modello di dati di visualizzazione.

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

Grazie

risposte:

1 per risposta № 1

Basta mantenere più viste, invece di una ... Puoi mantenere List o FrameworkElement [] basandosi su se vuoi crearne di nuove dinamicamente o no

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