/ / získať viaceré rovnaké zobrazenia z modulu MEF plugin spôsobom mvvm - wpf, mvvm, mef

získať viac rovnakých zobrazení z modulu MEF v mvvm spôsobe - wpf, mvvm, mef

Snažím sa vyvinúť softvér pre plugin MEF, ako príklad použite notepad ++, každá karta zobrazí zobrazenie importované z každého pluginu.

nasledujúce rozhranie by poskytlo jednu inštanciu ConfigView po komponente MEF. ale ako vytvoriť viac inštancií ConfigView?

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

-------- Možné riešenie ---------------------------------------- ----------------------------

Vlastne som sa snažil použiť v AvalonDock, a našiel avalonDock potrebuje dataTemplate vytvoriť viac názory. Týmto spôsobom musia zásuvné moduly poskytovať len jednu šablónu údajov o zobrazení.

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

Vďaka

odpovede:

1 pre odpoveď č. 1

Stačí mať niekoľko zobrazení, namiesto jedného ... Môžete udržiavať List alebo FrameworkElement [] založené na tom, či chcete dynamicky vytvoriť nové alebo nie

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