2010-12-01 5 views
1

Je MEF ont besoin d'un DependencyProperty d'un constructeur Voir dans mon ViewModel:Silverlight Voir exportation DependencyProperty ViewModel via

Mon problème: MEF ne serait pas SatisfyImports() « parce qu'elle est marquée par une ou plusieurs ExportAttributes '(qui est l'exception)

C'est la structure de code pour la vue:

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

et viewmodel:

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

S'il vous plaît me donner des conseils sur ce ou suggérer peut-être une meilleure solution pour passer des paramètres par mef

Dans mon cas, il me faudrait passer que dependecyproperty est pour le moment ...

Merci

Répondre

1

Votre travail est autour de pas vraiment bon .. ne pouvez pas vous retirer de l'exportation ChartTypes et passer manuellement à celui qui le veut? Je suppose que le viewmodel n'en est qu'un seul.

+1

Oui, seule la machine virtuelle en a besoin. Pourriez-vous être plus concret sur le passage de la propriété manuellement? Je ne vois vraiment pas comment cela peut être fait ... En outre, mon approche ne fonctionne pas avec les constructeurs ([Import (MethodTypes.ChartType)] Graphiques pourChartType, modèle IModel) Une idée à ce sujet? Parce que pas CompositionInitializer.SatisfyImports()? – dvox

+0

Devrais-je considérer la messagerie MVVMLight? – dvox

0

J'ai réussi à passer ça!

au lieu du code dans le constructeur par défaut, j'utilise:

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

      container.ComposeParts(this); 
     } 
    } 

et la valeur DependencyProperty est correctement propagées à la ViewModel (doit le faire après le contrôle est chargé, ou la propriété aura sa valeur par défaut valeur)

Cependant, je serais très reconnaissant si quelqu'un pouvait:

  • me dire comment générer un catalogue à partir d'un autre non-référence d assemblage?

Merci

+0

Que voulez-vous dire par assemblage non référencé? – hammett

Questions connexes