2010-10-25 2 views
18

Je reçois un message d'erreur «Appel récursif à l'API Peer Automation n'est pas valide» lors du chargement d'une grille de données avec un datatemplatecolumn contenant une colonne de zone de liste déroulante. L'erreur se retrouve dans notre code d'exception non gérée. Cela semble être un problème sur ma machine, et Google n'a fourni aucune source de conseils sur la résolution du problème. Le problème semble se produire uniquement lorsque je remplis les zones de liste déroulante avec des données. Remplir les comboboxes (si je ne charge pas les données) fonctionne correctement, et pendant que l'erreur est affichée, je suis en mesure de voir les données correctement récupérées en arrière-plan.L'appel récursif WPF à Automation Peer API n'est pas valide

J'utilise une grille de données WPF dans laquelle j'utilise un DataGridTemplateColumn pour ajouter une zone de liste déroulante dans la grille. J'ai la liste déroulante liée à une énumération en utilisant un objectdataprovider. Dans le code derrière lors de l'initialisation de mon écran, j'utilise une instruction Linq2Sql pour récupérer des données et remplir la source Items de la grille.

<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> 

Tout et tous les conseils sur la résolution de cette question est appréciée.

+1

J'ai rencontré le même problème et le problème a disparu lorsque j'ai défini la hauteur du DataGrid. –

Répondre

18

J'ai contourné le problème de ma part en désactivant l'automatisation sur le contrôle du réseau. J'ai trouvé que le problème était unique au contrôle WPF Toolkit, mais j'avais des problèmes de transition vers la version 4.0 officielle DataGrid (sans rapport avec cette question.)

Donc à la place, je dérive la classe à partir de WPFToolkit et fournisse cette substitution :

protected override AutomationPeer OnCreateAutomationPeer() 
{ 
    return null; 
} 

Peut-être que quelqu'un peut nous dire si c'est une bonne idée ou non.

+1

Je peux confirmer que cette solution de contournement est utile. J'ai remarqué qu'il est important de ne pas inclure la partie "assembly = ..." dans la déclaration de l'espace de noms xml si la classe de solution de contournement se trouve dans le même assembly que le fichier XAML (par exemple la partie assembly = est redondante). S'il est présent, le compilateur se plaindra de ne pas trouver la balise xml, bien qu'IntelliSense fonctionne. – lathander

+1

Je reçois le même problème mais ce n'est pas dans le 'DataGrid', j'ai un' Combobox' dans un 'Grid' et parfois quand j'essaie de cliquer sur pour sélectionner un élément différent de la liste il casse et lance la même exception donc je suppose que c'est un problème de 'combobox', quelqu'un a-t-il eu une autre solution. –

+0

Désolé, c'est un an de retard @FaisalMalikyar, mais je viens de frapper ça pour un ComboBox aussi. La solution semble être la même - sous-classe de la ComboBox existante, par ex. * classe publique ComboBox: System.Windows.Controls.ComboBox *, ajoutez le code ci-dessus à la nouvelle classe, puis ajoutez une référence à votre classe dans le code XAML, c'est-à-dire en remplaçant le ComboBox existant par le vôtre. – si618

3

Je rencontre le même problème - utilisez-vous le DataGrid de WPFToolkit, ou celui fourni avec .NET 4.0. Nous utilisons toujours la boîte à outils ici.

En outre, j'ai remarqué que ce problème ne se produit pas lorsque vous utilisez l'application via le bureau à distance.

problème similaire publié ici:

http://wpf.codeplex.com/workitem/14443

Avec une solution proposée. Je n'ai pas eu l'occasion de l'essayer.

+0

Je vous voterais, mais mon représentant est trop bas! – cunningdave

+0

J'utilise la base de données WPFToolkit. – Ryan

3

Je recevais le même problème dans NET 3.5 avec WPFToolkit DataGrid.

J'ai lié mon objet DataGrid WPFToolkit à EntityFramework ObservableCollection, avec une hiérarchie d'entités qui ont des associations bidirectionnelles (Parent < -> Items).

J'ai résolu le problème en désactivant implicitement AutoGenerateColumns activé sur le contrôle DataGrid et en définissant manuellement les colonnes.

Espérons que cela aide.

3

J'avais exactement la même erreur. Cependant pour moi il était étrange que la même application fonctionnait bien sur mon ordinateur portable et a provoqué l'erreur sur mon ordinateur de bureau. Le même système d'exploitation, la même architecture et le même Visual Studio avec les mêmes add-ons. J'ai donc vérifié les références à WPFToolkit sur mon ordinateur portable, où tout allait bien.Il a souligné:

C:\Program Files (x86)\WPF Toolkit\v3.5.40619.1\WPFToolkit.dll 

je vérifié référence sur mon bureau, il a souligné:

C:\Program Files (x86)\WPF Toolkit\v3.5.50211.1\WPFToolkit.dll 

Comme vous pouvez le voir, j'avais deux versions différentes de WPFToolkit installées. J'ai copié le dossier entier de mon ordinateur portable à mon ordinateur de bureau, ai changé des références de la version v3.5.50211.1 en v3.5.40619.1 et le problème a été résolu. Plus d'exceptions. J'espère que cela aidera quelqu'un aussi.

2

J'ai également eu le même problème. J'ai donc vérifié aussi la référence au WPFToolkit. J'avais deux versions de WPFToolkit installées (Version v3.5.50211.1), mais seulement sur mon ordinateur portable fonctionne très bien.

Donc, j'ai mis l'ancienne version v3.5.40619.1 sur mon PC Windows Embedded Standard 7 et plus aucune exception.

Je suis donc arrivé à la conclusion que dans certains cas, la version la plus récente a des problèmes avec le système d'exécution.

2

Salut J'ai également eu le même problème lorsque j'exécute Microsoft Test Manager avec notre application WPF. Nous utilisions la version v3.5.50211.1 de WPFtoolkit, en remplaçant la boîte à outils WPF avec la version inférieure v3.5.40619.1 qui a résolu ce problème.

Maintenant, nous sommes en mesure d'exécuter l'outil MTM et l'application WPF simultanément.

Dans WPFToolkit v3.5.50211.1 un bogue est corrigé lié à UI Automation et j'imagine que c'est pour cette raison que ce problème d'homologue d'automatisation arrive en utilisant la dernière version de WPFtoolkit.

Questions connexes