2011-09-07 141 views
2

我不知道我寫的DataGrid有什麼問題。內容顯示正確,但當我嘗試添加一個OnSelectionChanged事件處理程序時,奇怪發生。請幫助我!將事件處理程序添加到WPF DataGrid拋出NullReferenceException

首先,下面沒有任何問題:

<DataGrid ItemsSource="{Binding XPath=services/service}" AutoGenerateColumns="False" Padding="2"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header=" Service Name " Binding="{Binding XPath=name}" Width="300"/> 
      <DataGridTextColumn Header=" Status " Binding="{Binding XPath=status}" /> 
     </DataGrid.Columns> 
</DataGrid> 

這裏服務/服務是從我的外部XML文件。我在文檔中使用了XmlDataProvider資源。在該XML中,一些「服務」標籤具有許多「服務」子元素;一些「服務」標籤根本沒有任何孩子(想知道這是否是問題的原因)。

所以得到的用戶界面是一些datagrids包含所有的行和列。某些數據網格僅顯示標題。

現在我加入這個:

<DataGrid ItemsSource="{Binding XPath=services/service}" AutoGenerateColumns="False" Padding="2" 
SelectionChanged="DataGrid_SelectionChanged"> 

並把在代碼中的空方法:

private void DataGrid_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) 
    { 


    } 

現在我執行,並拋出一個異常

系統.NullReferenceException未處理 Message =未將對象引用設置爲對象的實例。 Source = ForeFront支持監視器2 StackStack: 位於h:\ Personal \ Visual Studio 2010 \ Projects \ ForeFront支持中的FSM.MainWindow.System.Windows.Markup.IStyleConnector.Connect(Int32 connectionId,Object target)\ ForeFront支持Monitor 2 \ ForeFront支撐監視器2 \ MainWindow.xaml:線42 在System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader,XamlObjectWriter currentWriter) 在System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlObjectWriter objectWriter) 在System.Windows.FrameworkTemplate.LoadOptimizedTemplateContent(DependencyObject的容器,IComponentConnector組件連接器,IStyleConnector樣式連接器,列表1 affectedChildren, UncommonField 1 templatedNonFeChildrenField) 在System.Windows.FrameworkTemplate.LoadContent(DependencyObject contai列表'1受影響的孩子)...

回答

0

綁定到WPF DataGrid的XML可能是曲折的。

嘗試以不同的方式結合XML(如對象模型)... How to bind xml to the WPF DataGrid correctly?

然後檢查是否選擇正確更改事件觸發?

+0

非常感謝。但是,此事件處理程序不僅發生在DataGrid中。此DataGrid是ListBox元素的數據模板的一部分。當我在其他數據模板中添加事件處理程序時,也會出現同樣的問題。 – Erencie

+0

那麼奇怪。 –

相關問題