1

I am getting an XAMLParseException that is really covering up another exception. Here is part of the 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

Here is line 29:

lvwMain.ItemsSource = _assignmentRepo.ListAssignments();

Where lvwMain is a ListView and _assignmentsRepo is an IAssignmentRepository declared like:

IAssignmentRepository _assignmentRepo; 

That is where the error occurs. I am using the repository pattern Anyone willing to take a guess?
Here is my 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>

4

4 回答 4

3

在您的构造函数中,确保InitializeComponent在执行任何其他构造函数逻辑之前进行调用。

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

    // Now do the rest of the constructor.
    ...
    lvwMain.ItemsSource = _assignmentRepo.ListAssignments();
    ...
}
于 2010-01-24T23:36:44.553 回答
0

看起来_assignmentReponull因为你从来没有分配给它。线

IAssignmentRepository _assignmentRepo; 

声明一个变量,该变量_assignmentRepo是对实现的对象的引用,IAssignmentRepository但它实际上并不实例化这样的对象。在您的代码中的某个时刻,您需要像这样的一行

_assignmentRepo = new AssignmentRepository();

哪里AssignmentRepository是一个实现IAssignmentRepository. 当然,您可以在一行中声明和实例化:

IAssignmentRepository _assignmentRepo = new AssignmentRepository();

还有其他选择,例如

_assignmentRepo = RepositoryFactory.CreateRepository<AssignmentRepository>();

检查这一点的一个非常简单的方法是在有问题的行上设置一个断点,启动调试器并运行直到你遇到断点,然后将鼠标悬停在_assignmentRepo. 然后会出现一个小工具提示,您可以查看是否_assignmentRepo确实是null.

如果您省略了一个细节并且您实际上已经明确分配_assignmentRepo,那么唯一的另一种可能性就是lvmMain空值。你没有给我们足够的信息来推断为什么会这样。

于 2010-01-24T00:55:40.920 回答
0

如果 lvwMain 为空,您也会得到此异常。

于 2010-01-24T13:56:48.927 回答
0

我认为问题出在方法“ListAssignments()”上。此方法返回的集合中的某些项为 null,当控件尝试绑定所有项(期望全部为 NON null)时,它会为 null 对象引发异常。

尝试这个...

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

理想情况下,ListAssignments() 应该忽略空对象。但是你可以试试这个来摆脱异常。

于 2010-01-24T10:18:12.423 回答