向WPF DataGrid添加事件处理程序会抛出NullReferenceException

时间:2011-09-07 09:32:44

标签: wpf xaml wpf-controls wpfdatagrid xmldataprovider

我不确定我写过的DataGrid有什么问题。内容显示正确,但当我尝试添加一个OnSelectionChanged事件处理程序时,发生了奇怪的事情。请帮助我!

首先,下面没有问题:

<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中,一些'services'标签有许多'service'子元素;一些“服务”标签根本没有任何孩子(想知道这是否是问题的原因)。

因此,生成的UI是一些datagrids包含所有行和列。一些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)
    {


    }

现在我执行,抛出异常

  

System.NullReferenceException未处理     Message =对象引用未设置为对象的实例。     Source = ForeFront支持监视器2     堆栈跟踪:          位于h:\ Personal \ Visual Studio 2010 \ Projects \ ForeFront支持监视器2 \ ForeFront支持监视器2 \ MainWindow.xaml:第42行中的FSM.MainWindow.System.Windows.Markup.IStyleConnector.Connect(Int32 connectionId,Object target)          在System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader,XamlObjectWriter currentWriter)          在System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlObjectWriter objectWriter)          在System.Windows.FrameworkTemplate.LoadOptimizedTemplateContent(DependencyObject容器,IComponentConnector componentConnector,IStyleConnector styleConnector,List 1 affectedChildren, UncommonField 1 templatedNonFeChildrenField)          在System.Windows.FrameworkTemplate.LoadContent(DependencyObject容器,List`1 affectedChildren)...

1 个答案:

答案 0 :(得分:0)

与WPF DataGrid的XML绑定可能很痛苦。

尝试以不同的方式绑定XML(如对象模型)...... How to bind xml to the WPF DataGrid correctly?

然后检查选择更改事件是否正确触发?