WPF Рекурсивный вызов метода автоматизации Peer API недействителен
Я получаю сообщение об ошибке "Рекурсивный вызов метода автоматизации Peer API недействителен" при загрузке datagrid с помощью столбца datatemplate, содержащего столбец combobox. Ошибка заканчивается в нашем необработанном коде исключения. Это, похоже, проблема на моей машине, и Google не предоставил никаких указаний по решению проблемы. Проблема возникает, только когда я заполняю выпадающие списки с данными. Заполнение списков сопоставлений (если я не загружаю данные) работает правильно, и пока отображается ошибка, я могу видеть, что данные правильно извлекаются в фоновом режиме.
Я использую WPat datagrid, где я использую DataGridTemplateColumn для добавления combobox внутри сетки. У меня есть выпадающий список, связанный с перечислением с использованием объекта dataatrovider. В коде, который стоит при инициализации моего экрана, я использую оператор 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>
Все рекомендации по решению этой проблемы приветствуются.
Ответы
Ответ 1
Я обошел проблему на моем конце, отключив Automation на элементе управления сеткой. Я обнаружил, что проблема была уникальной для элемента управления WPF Toolkit, но у меня возникли проблемы с переходом на официальный релиз DataGrid 4.0 (не связанный с этим вопросом.)
Поэтому вместо этого я получаю класс из WPFToolkit и поставлю это переопределение:
protected override AutomationPeer OnCreateAutomationPeer()
{
return null;
}
Может кто-то может сказать нам, если это хорошая идея или нет.
Ответ 2
У меня возникает одна и та же проблема: используете ли вы datagrid из WPFToolkit или тот, который поставляется с .NET 4.0. Мы все еще используем этот набор инструментов.
Кроме того, я заметил, что эта проблема не возникает при использовании приложения через удаленный рабочий стол.
Аналогичная проблема размещена здесь:
http://wpf.codeplex.com/workitem/14443
С предлагаемым решением. У него не было возможности попробовать.
Ответ 3
Я получал ту же проблему в NET 3.5 с WPFoolkit DataGrid.
Я связал свой WPFoolkit DataGrid с EntityFramework ObservableCollection, с иерархией сущностей, которые имеют двухсторонние ассоциации (Parent ↔ Items).
Я решил проблему, отключив неявно включенные AutoGenerateColumns в DataGrid и вручную установил столбцы.
Надеюсь, что это поможет.
Ответ 4
У меня была точно такая же ошибка. Однако для меня было странно, что одно приложение отлично работало на моем ноутбуке и вызвало ошибку на моем настольном ПК. Одна и та же ОС, одна и та же архитектура и одна и та же Visual Studio с такими же надстройками.
Итак, я проверил ссылки на WPFToolkit на моем ноутбуке, где все было в порядке. Он указал на:
C:\Program Files (x86)\WPF Toolkit\v3.5.40619.1\WPFToolkit.dll
то я проверил ссылку на своем рабочем столе, на что указал:
C:\Program Files (x86)\WPF Toolkit\v3.5.50211.1\WPFToolkit.dll
Как вы можете видеть, у меня было две разные версии WPFToolkit, установленные. Я скопировал всю папку с моего ноутбука на свой рабочий стол, изменил ссылки с версии v3.5.50211.1 на v3.5.40619.1, и проблема была решена. Больше никаких исключений. Надеюсь, это тоже поможет кому-то.
Ответ 5
У меня также была та же проблема. Поэтому я также проверил ссылку на WPFToolkit. У меня были две версии WPFToolkit, установленные (версия v3.5.50211.1), но только на моем ноутбуке это прекрасно.
Итак, я поставил более старую версию v3.5.40619.1 на моем компьютере с Windows Embedded Standard 7 и не более чем за исключением.
Итак, я пришел к выводу, что в некоторых случаях более новая версия имеет некоторые проблемы с системой запуска.
Ответ 6
Привет У меня также была такая же проблема, когда я запускаю Microsoft Test Manager с нашим WPF-приложением. Мы использовали версию WPFtoolkit v3.5.50211.1, заменив инструментарий WPF более низкой версией v3.5.40619.1, решив эту проблему.
Теперь мы можем запускать инструмент MTM и приложение WPF одновременно.
В WPFToolkit v3.5.50211.1 исправлена одна ошибка, связанная с UI Automation, и я думаю, из-за этого эта проблема параллельной автоматизации возникает при использовании последней версии WPFtoolkit.