我收到的XAMLParseException确实掩盖了另一个异常。这是堆栈跟踪的一部分:
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
这是第29行:
lvwMain.ItemsSource = _assignmentRepo.ListAssignments();
其中lvwMain是ListView,而_assignmentsRepo是一个声明为的IAssignmentRepository:
IAssignmentRepository _assignmentRepo;
这就是发生错误的地方。我正在使用存储库模式任何人都愿意猜测? 这是我的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>
答案 0 :(得分:3)
在构造函数中,确保在执行任何其他构造函数逻辑之前放置InitializeComponent
调用。
public MainWindow()
{
// Do this first.
InitializeComponent();
// Now do the rest of the constructor.
...
lvwMain.ItemsSource = _assignmentRepo.ListAssignments();
...
}
答案 1 :(得分:0)
_assignmentRepo
看起来像null
,因为您从未分配过它。这条线
IAssignmentRepository _assignmentRepo;
声明一个变量_assignmentRepo
,它是对实现IAssignmentRepository
的对象的引用,但它实际上并不实例化这样的对象。在代码中的某个时刻,您需要一个像
_assignmentRepo = new AssignmentRepository();
其中AssignmentRepository
是实现IAssignmentRepository
的类。当然,您可以在一行中声明和实例化:
IAssignmentRepository _assignmentRepo = new AssignmentRepository();
还有其他选项,例如
_assignmentRepo = RepositoryFactory.CreateRepository<AssignmentRepository>();
检查此问题的一种非常简单的方法是在违规行上设置断点,启动调试器并运行直到达到断点,然后将鼠标悬停在_assignmentRepo
上。然后会出现一个小工具提示,您可以看到_assignmentRepo
是否确实null
。
如果您省略了详细信息,并且实际上确实已经分配了_assignmentRepo
,那么唯一的另一种可能性是lvmMain
为空。你还没有给我们足够的信息来推断为什么会出现这种情况。
答案 2 :(得分:0)
我认为问题在于方法“ListAssignments()”。 此方法返回的集合中的某些项为null,并且当控件尝试绑定所有项时(期望all为NON null),它会抛出null对象的异常。
试试这个......
lvwMain.ItemsSource = _assignmentRepo.ListAssignments().where(item=>item!=null).ToList();
理想情况下,ListAssignments()应该忽略空对象。但你可以尝试这个来摆脱异常。
答案 3 :(得分:0)
你也会得到这个例外是lvwMain为null。