2010-01-24 13 views
1

Je reçois une exception XAMLParseException qui recouvre réellement une autre exception. Voici une partie de la stacktrace:
Message=Object reference not set to an instance of an object.
Source=AssignmentOrganizer
StackTrace:
at AssignmentOrganizer.MainWindow..ctor() in C:\Users\Mohit\Documents\Visual Studio 2010 \Projects\AssignmentOrganizer\AssignmentOrganizer\MainWindow.xaml.cs:line 29

Voici la ligne 29:La référence d'objet n'est pas définie sur une instance d'un référentiel d'objets

lvwMain.ItemsSource = _assignmentRepo.ListAssignments(); 

Où lvwMain est un ListView et _assignmentsRepo est une IAssignmentRepository déclarée comme:

IAssignmentRepository _assignmentRepo; 

C'est où l'erreur se produit . J'utilise le modèle de référentiel Quelqu'un est-il prêt à deviner?
Voici mon XAML:

<Window x:Class="AssignmentOrganizer.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit" 
    Title="MainWindow" Height="518" Width="755"> 
<DockPanel> 
    <Menu DockPanel.Dock="Top"> 

    </Menu> 
    <ToolBar DockPanel.Dock="Top"> 

    </ToolBar> 
    <StatusBar DockPanel.Dock="Bottom"> 

    </StatusBar> 
    <Grid DockPanel.Dock="Left" Width="150"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="259*" /> 
      <RowDefinition Height="259*" /> 
     </Grid.RowDefinitions> 
    </Grid> 
    <Grid DockPanel.Dock="Right" Width="150"> 

    </Grid> 
    <Grid> 
     <ListView x:Name="lvwMain"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Title" Width="125" /> 
        <GridViewColumn Header="Due" Width="75" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </Grid> 
</DockPanel> 

Répondre

3

Dans votre constructeur, assurez-vous de mettre l'appel InitializeComponent avant de faire toute autre logique de constructeur.

public MainWindow() 
{ 
    // Do this first. 
    InitializeComponent(); 

    // Now do the rest of the constructor. 
    ... 
    lvwMain.ItemsSource = _assignmentRepo.ListAssignments(); 
    ... 
} 
0

On dirait _assignmentRepo est null parce que vous ne lui est affecté. La ligne

IAssignmentRepository _assignmentRepo; 

déclare une _assignmentRepo variable qui est une référence à un objet qui implémente IAssignmentRepository mais il ne fait pas instancier un tel objet. À un certain moment dans votre code, vous avez besoin d'une ligne comme

_assignmentRepo = new AssignmentRepository(); 

AssignmentRepository est une classe qui implémente IAssignmentRepository. Bien sûr, vous pouvez déclarer et instancier en une ligne:

IAssignmentRepository _assignmentRepo = new AssignmentRepository(); 

Il existe d'autres options telles que

_assignmentRepo = RepositoryFactory.CreateRepository<AssignmentRepository>(); 

Une manière très simple de le vérifier est de définir un point d'arrêt sur la ligne incriminée, début le débogueur et exécutez jusqu'à ce que vous atteigniez le point d'arrêt, puis passez la souris sur _assignmentRepo. Ensuite, une petite bulle va apparaître et vous pouvez voir si _assignmentRepo est en effet null.

Si vous omettez un détail et que vous avez en fait assigné définitivement _assignmentRepo alors la seule autre possibilité est que lvmMain est nul. Vous ne nous avez pas donné suffisamment d'informations pour en déduire pourquoi cela pourrait être le cas.

+0

J'ai essayé de l'affecter à AssignmentRepository. Mais _assignmentRepo n'était pas nul comme j'ai appris du point de rupture. –

+0

Si je supprime la ligne de code qui définit la source de l'élément listview, le code fonctionne très bien. –

+0

@Mohit Deshpande: Si vous êtes certain que vous avez assigné '_assignmentRepo', vous devez également vérifier' lvmMain'. – jason

0

Je pense que le problème est avec la méthode "ListAssignments()". Certains des éléments de la collection retournés par cette méthode sont null, et lorsque le contrôle tente de lier tous les éléments (en supposant que tous les éléments soient NON NULL), il lance une exception pour un objet nul.

essayer ...

lvwMain.ItemsSource = _assignmentRepo.ListAssignments().where(item=>item!=null).ToList(); 

idéalement, ListAssignments() devrait ignorer les objets nuls. Mais vous pouvez essayer ceci pour se débarrasser de l'exception.

+0

La trace de la pile n'affiche pas l'exception comme étant lancée dans 'ListAssignments'. – jason

+0

Ce ne sera pas. C'est parfaitement bien pour une méthode de retourner une collection avec quelques éléments NULL en elle. Donc pas de problème dans ListAssignments(). L'exception est levée lorsque cette collection est affectée à ItemSource, car elle va itérer sur chaque élément (en espérant que tous les éléments sont non null) et créer ListItem pour chaque élément. –

+0

Ensuite, il est trompeur de dire que le problème est avec 'ListAssignments'. – jason

0

Vous obtiendrez également cette exception est lvwMain est null.