2010-12-01 10 views
1

Ich habe einen Bedarf an einer DependencyProperty von einem Blick in meinem Ansichtsmodell Konstruktor:Silverlight Ansicht DependencyProperty zu Ansichtsmodell über MEF Export

Mein Problem: MEF würde nicht SatisfyImports() ‚, weil sie mit einem oder mehreren ExportAttributes markiert '(das ist die Ausnahme)

dies die Code-Struktur für die Ansicht ist:

public class MyView : UserControl 
{ 
    [Export(MethodTypes.ChartType)] 
    public Charts MyChartType 
    { 
     get 
     { 
      object k = GetValue(ChartTypeProperty); 
      Charts f = (Charts)Enum.Parse(typeof(Charts), k.ToString(), true); 
      return f; 
     } 
     set 
     { 
      SetValue(ChartTypeProperty, value); 
     } 
    } 

    [Import(ViewModelTypes.GenericChartViewModel)] 
    public object ViewModel 
    { 
     set 
     { 
      DataContext = value; 
     } 
    } 

    public MyView() 
    { 
     InitializeComponent(); 

     if (!ViewModelBase.IsInDesignModeStatic) 
     { 
      // Use MEF To load the View Model 
      CompositionInitializer.SatisfyImports(this); 
     } 
    } 
} 

und das Ansichtsmodell:

[PartCreationPolicy(CreationPolicy.NonShared)] 
[Export(ViewModelTypes.GenericChartViewModel)] 
public class GenericChartViewModel 
{ 
    [ImportingConstructor] 
    public GenericChartViewModel([Import(MethodTypes.ChartType)] Charts forChartType) 
    { 
     string test = forChartType.ToString(); 
    } 
} 

Bitte geben Sie mir irgendwelche Hinweise auf diese oder vielleicht eine bessere Lösung vorschlagen Parameter durch mef

In meinem Fall vorbei, würde ich nur dependecyproperty ist jetzt ...

Dank

Antwort

1

um Ihre Arbeit ist nicht wirklich gut .. können Sie den Export von ChartTypes nicht entfernen und manuell passieren, wer es will? Ich nehme an, das Viewmodel ist nur eine davon interessiert.

+1

Ja, nur die VM benötigt es; Konnten Sie konkreter sein, wenn Sie die Eigenschaft manuell übergeben? Ich sehe wirklich nicht, wie das gemacht werden kann ... Auch funktioniert mein Ansatz nicht mit Konstruktoren ([Import (MethodTypes.ChartType)] Charts forChartType, IModel-Modell) Irgendeine Idee auf dem? Weil keine CompositionInitializer.SatisfyImports()? – dvox

+0

Sollte ich MVVMLight Messaging in Betracht ziehen? – dvox

0

geben müssen Ich habe es geschafft!

Anstelle des Codes in dem Default-Konstruktor, verwende ich:

void MyView_Loaded(object sender, RoutedEventArgs e) 
    { 
     if (!ViewModelBase.IsInDesignModeStatic) 
     { 
      var catalog = new TypeCatalog(typeof(GenericChartViewModel)); 
      var container = new CompositionContainer(catalog); 

      container.ComposeParts(this); 
     } 
    } 

und der DependencyProperty Wert auf das Ansichtsmodell korrekt propagiert wird (muß dies tun, nachdem die Steuerung geladen wird, oder die Eigenschaft den Standard hat Wert)

Allerdings würde ich sehr dankbar, wenn jemand könnte:

  • mir sagen, wie einen Katalog von einer anderen nicht-Referenz erzeugen d Montage?

Dank

+0

Was meinst du mit nicht referenzierten Assembly? – hammett

Verwandte Themen