Domanda

sto ottenendo un XAMLParseException che è veramente coprendo un'altra eccezione. Ecco parte del 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

Ecco linea 29:

lvwMain.ItemsSource = _assignmentRepo.ListAssignments();

Dove lvwMain è un ListView e _assignmentsRepo è un IAssignmentRepository dichiarato come:

IAssignmentRepository _assignmentRepo; 

E 'qui che si verifica l'errore. Sto usando il modello Chiunque repository disposti a prendere una congettura?
Ecco la mia 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>

È stato utile?

Soluzione

nel costruttore, assicuratevi di mettere la chiamata InitializeComponent prima di fare qualsiasi altra logica costruttore.

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

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

Altri suggerimenti

Credo che il problema sia con metodo "ListAssignments ()". Alcuni degli elementi della collezione restituita da questo metodo è nullo, e quando il controllo tenta di associare tutti gli elementi (aspettavano tutti di essere nullo NON) getta un'eccezione per un oggetto nullo.

provare questo ...

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

idealmente, ListAssignments () dovrebbero ignorare oggetti nulli. Ma si può provare questo sbarazzarsi di eccezione.

Si potrebbe anche ottenere questa eccezione è lvwMain è nullo.

Sembra che _assignmentRepo è null perché non hai mai assegnato ad esso. La linea

IAssignmentRepository _assignmentRepo; 

dichiara una _assignmentRepo variabile che è un riferimento ad un oggetto che implementa IAssignmentRepository ma in realtà non istanziare un oggetto. Ad un certo punto nel codice hai bisogno di una linea come

_assignmentRepo = new AssignmentRepository();

dove AssignmentRepository è una classe che implementa IAssignmentRepository. Naturalmente, è possibile dichiarare e creare un'istanza in una riga:

IAssignmentRepository _assignmentRepo = new AssignmentRepository();

Ci sono altre opzioni, come

_assignmentRepo = RepositoryFactory.CreateRepository<AssignmentRepository>();

Un modo molto semplice per verificare questo è quello di impostare un punto di interruzione sulla linea incriminata, avviare il debugger ed eseguire fino a colpire il punto di interruzione, e quindi passare il mouse sopra _assignmentRepo. Poi un po 'suggerimento verrà in su e si può vedere se è davvero _assignmentRepo null.

Se si sta omettendo un dettaglio e si dispone in effetti _assignmentRepo definitivamente assegnato allora l'unica altra possibilità è che lvmMain è nullo. Non ci ha dato informazioni sufficienti per dedurre il perchè questo potrebbe essere il caso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top