在加载包含组合框列的datatemplatecolumn的数据网格时,我收到一条错误消息“对Automation Peer API的递归调用无效”。错误最终被我们未处理的异常代码捕获。这似乎是我的机器上的一个问题,并且Google未提供解决此问题的指南。仅当我用数据填充组合框时,才会出现此问题。填充组合框(如果我不加载数据)可以正常工作,并且在显示错误时,我能够看到在后台正确检索到的数据。

我在使用WPF数据网格,在其中使用DataGridTemplateColumn在网格内添加组合框。我使用objectdataprovider将下拉列表绑定(bind)到枚举。在初始化屏幕时,在后面的代码中,我使用Linq2Sql语句检索数据并填充网格的Itemssource。

<grid:DataGrid.Resources>
 <ObjectDataProvider
  x:Key="ChangeTypeData"
  MethodName="GetValues"
  ObjectType="{x:Type System:Enum}">
  <ObjectDataProvider.MethodParameters>
   <x:Type TypeName="namespace:ChangeType" />
  </ObjectDataProvider.MethodParameters>
 </ObjectDataProvider>
    </grid:DataGrid.Resources>

 <grid:DataGrid.Columns>
 <grid:DataGridTextColumn Binding="{Binding DatapointName}" Header="Datapoint Changed" IsReadOnly="True" Width="Auto" />
 <grid:DataGridTemplateColumn Header="Change Type">
  <grid:DataGridTemplateColumn.CellTemplate>
   <DataTemplate>
    <ComboBox
     Text="{Binding Path=ChangeTypeName}"
     ItemsSource="{Binding Source={StaticResource ChangeTypeData}}"
     Name="dgcboChangeType"
SelectionChanged="dgcboChangeType_SelectionChanged"/>
   </DataTemplate>
  </grid:DataGridTemplateColumn.CellTemplate>


感谢您提供解决此问题的所有指导。

最佳答案

通过关闭网格控件上的“自动化”,我最终绕过了这个问题。我发现该问题是WPF Toolkit控件所独有的,但是我在过渡到4.0官方版本DataGrid时遇到了问题(与该问题无关)。

因此,我改为从WPFToolkit派生该类并提供此覆盖:

protected override AutomationPeer OnCreateAutomationPeer()
{
   return null;
}

也许有人可以告诉我们这是否是个好主意。

10-04 14:10