2009-11-02 4 views
1

Après avoir reçu le code all clear pour déplacer le code de ma méthode Page_Loaded vers le constructeur (voir HERE), je rencontre maintenant des erreurs sur ma requête Linq to entities. Il provoque maintenant une exception nullreference et je ne peux pas comprendre pourquoi pour le moment. Voir ci-dessous pour l'emplacement de l'exception.WPF - Linq déplacé vers le constructeur provoque une exception de référence null, comment ça se fait?

public Building() 
{ 
    InitializeComponent(); 

    lvBuildings.ItemsSource = App.ocBuildings; 
    getBuildings(); 
} 


private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 

} 

private void getBuildings() 
{ 
    App.ocBuildings.Clear(); 
    var tehBuildings = from building in App.ents.Buildings 
         where building.Organisations.OrganisationID == App.selectedOrganisation.OrganisationID 
         select building; 

    foreach (Buildings addBuilding in tehBuildings (<--Exception)) 
    { 
     App.ocBuildings.Add(addBuilding); 
    } 

} 

Vous avez des idées?

Merci, Kohan.

+0

Avez-vous essayé le débogage de votre code avec « casser quand exception est levée » sous tension? –

+1

L'affichage d'une trace de pile complète serait utile. –

+0

Par curiosité, pourquoi voulez-vous retirer ce code du gestionnaire d'événements Loaded? – oltman

Répondre

0

@JaredPar.

Fixe merci à vous, je n'aurais jamais pensé à regarder la page précédente dans mon client (que je chargeais de) pour la réponse.

J'ai eu un bouton avec le code:

 Page newPage; 
     if (App.ModeType == "Mode1"){ newPage = new MyClient.Pages.Mode1.Building(); } 
     else if (App.ModeType == "Mode2") { newPage = new MyClient.Pages.Mode2.RiskQuestions(); } 
     else { throw new NotImplementedException(); } ///Must be Mode3 

      Organisations thisOrg = (Organisations)lvOrganisations.SelectedItem; 
     App.selectedOrganisation = thisOrg; 

     NavigationService.Navigate(newPage); 

En déplaçant App.selectedOrganisation avant que je mis le "newPage" tout a été résolu. Je suppose que le constructeur est appelé au moment où je définissais "newPage".

Par souci de clarté, le code final qui a fonctionné pour moi ressemble à ceci:

  Organisations thisOrg = (Organisations)lvOrganisations.SelectedItem; 
     App.selectedOrganisation = thisOrg; 

     Page newPage; 
     if (App.ModeType == "Mode1"){ newPage = new MyClient.Pages.Mode1.Building(); } 
     else if (App.ModeType == "Mode2") { newPage = new MyClient.Pages.Mode2.RiskQuestions(); } 
     else { throw new NotImplementedException(); } ///Must be Mode3 

     NavigationService.Navigate(newPage); 
3

Il semble que l'un des éléments suivants évalue à null

  • App.ents
  • App.ents.Buildings
  • building.Organisations
  • App.SelectedOrganisation

Cela entraînerait le lancement d'un NullReferenceException dans chaque boucle car la requête n'est pas évaluée c'est utilisé.

Nous aurons besoin de plus d'informations sur vous pour savoir lequel est nul.

+0

Il semble que App.selectedOrganisation soit null. Pourquoi déplacer ce code de Page_Loaded (où cela fonctionne bien) au constructeur le fait-il casser? – 4imble

+1

@Kohan, il est probable que d'autres codes qui s'exécutent entre le constructeur et l'événement Page_Loaded provoquent que cette valeur soit non nulle. Je n'ai pas assez de contexte dans votre projet pour pouvoir dire quoi. – JaredPar

+1

Page_Loaded incendies après le chargement de la page. App.selectedOrganization est presque certainement une référence à quelque chose qui est défini comme résultat de la liaison. La liaison n'a pas eu lieu avant le chargement de la page. –

Questions connexes