2011-09-07 93 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

那么奇怪。 –

相关问题