2010-01-24 126 views
1

我得到一個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> 

回答

3

在構造函數中,確保在執行任何其他構造函數邏輯之前先調用InitializeComponent

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

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

貌似_assignmentReponull因爲你永遠不分配給它。行

IAssignmentRepository _assignmentRepo; 

聲明變量_assignmentRepo即到實現IAssignmentRepository一個對象的引用,但它實際上並不這樣實例化的對象。在代碼中的某些時候,你需要像

_assignmentRepo = new AssignmentRepository(); 

線,其中AssignmentRepository是實現IAssignmentRepository類。當然,你可以聲明,並在同一行實例:

IAssignmentRepository _assignmentRepo = new AssignmentRepository(); 

還有其他選項,如

_assignmentRepo = RepositoryFactory.CreateRepository<AssignmentRepository>(); 

一個非常簡單的方法來檢查,這是設置在違規線斷點,開始啓動調試器並運行,直到您點擊斷點,然後將鼠標懸停在_assignmentRepo上。然後會出現一個小工具提示,你可以看到_assignmentRepo確實是null

如果您正在省略細節並且實際上已明確指定_assignmentRepo,那麼唯一的其他可能是lvmMain爲空。你沒有給我們足夠的信息來推斷爲什麼會是這種情況。

+0

我試着將它分配給AssignmentRepository。但是_assignmentRepo並不是空的,因爲我從斷點中學到了東西。 – 2010-01-24 01:27:06

+0

如果我刪除了設置listview項目源的代碼行,代碼運行得很好。 – 2010-01-24 03:17:45

+0

@Mohit Deshpande:如果你確定你已經分配了'_assignmentRepo',那麼你還需要檢查'lvmMain'。 – jason 2010-01-24 20:42:46

0

我認爲問題出在方法「ListAssignments()」。 此方法返回的集合中的某些項目爲null,並且當控件試圖綁定所有項目(期望所有項目都爲NON null)時,它將引發空對象的異常。

試試這個...

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

理想,ListAssignments()應該忽略空的對象。但是你可以試着去擺脫這個例外。

+0

堆棧跟蹤不會在「ListAssignments」內引發異常。 – jason 2010-01-24 12:53:47

+0

它不會。對於返回一個包含null項的集合的方法來說,它非常好。所以在ListAssignments()中沒有問題。 將該集合分配給ItemSource時引發異常,因爲它將迭代每個項目(期望所有項目都爲非null)併爲每個項目創建ListItem。 – 2010-01-24 14:17:42

+0

然後說這個問題與'ListAssignments'有關就是誤導。 – jason 2010-01-24 23:44:48

0

你也會得到這個異常是lvwMain爲null。

相關問題