2010-04-24 17 views
0

Ce que je suis: Une première chance exception du type 'System.NullReferenceException' a eu lieu dans PresentationFramework.dllInjecter ViewModel avec des données throws Exception

Lorsque j'utilise un paramètre pour le constructeur de ma classe LessonPlannerViewModel. J'utilise une classe datatemplateselector pour passer de la vue hebdomadaire à la vue quotidienne.

public class ApplicationNavigationTemplateSelector : DataTemplateSelector 
{ 
    public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
     if (item is LessonPlannerViewModel) 
     { 
      var vm = item as LessonPlannerViewModel; 
      Window window = Application.Current.MainWindow;     

      if (vm.IsDailyView) 
       return window.FindResource("dailyViewTemplate") as DataTemplate; 
      else 
       return window.FindResource("weeklyViewTemplate") as DataTemplate; 
     } 
     return base.SelectTemplate(item, container); 
    } 
} 

public LessonPlannerViewModel(DateTime asOfDate) 
    { 
     _asOfDate = asOfDate; 

     if(_isDailyView) 
      LoadDailyData(); 
     if(_isWeeklyView) 
      LoadWeeklyData(); 

...

est-ce pas permis? Sans le paramètre, je ne reçois aucune exception ...

Qu'est-ce que je me trompe?

EDIT: J'ai modifié le IcI paramètre à un entier et a obtenu un meilleur message; P

XamlParseException => « Aucun constructeur correspondant trouvé sur le type 'TBM.ViewModel.LessonPlannerViewModel'. Vous pouvez utiliser les directives Arguments ou FactoryMethod pour construire ce type. ' Numéro de ligne '13' et position de ligne '10'.

ok c'est maintenant compréhensible, que

<UserControl.Resources> 
    <ViewModel:LessonPlannerViewModel x:Key="LessonPlannerViewModelID" /> 
</UserControl.Resources> 

n'a pas de paramètre.

Alors que faire maintenant?

Répondre

0

Vous pouvez utiliser un modèle de médiateur pour envoyer les données au viewmodel après son initialisation. (Utilisation d'un constructeur viewmodel sans aucun paramètre)

J'utilise MVVM Light ToolKit de Laurent Bugnion. Un cadre vraiment sympa et léger pour mvvm. Cela inclut un médiateur appelé Messenger

Sinon, vous trouverez de nombreuses sources pour le modèle de médiateur: Google Search mvvm mediator

+0

J'utilise déjà le cadre laurent's. Mais j'ai vu que ma stratégie de chargement devait changer comme l'exécution d'une méthode Init pour charger des données lors de la création de l'objet de classe. – msfanboy

+0

J'ai fait cette expérience aussi, il est préférable de laisser le constructeur nettoyer ou simplement enregistrer des messages. Vous pouvez utiliser une classe de base abstraite avec des méthodes abstraites pour l'initialisation, l'activation, la réinitialisation, l'actualisation et les actions viewmodel comme ça. – CodeWeasel

+0

ah qui se soucie ... ich akzeptier das als Réponse XD – msfanboy