2009-05-29 10 views
13

Normalement, je ne veux pas juste poster un message d'erreur sur SO, mais après qu'une recherche Google n'a trouvé qu'un seul hit, je pensais qu'au moins ouvrir le plancher pour cette erreur ici sur SO. J'ai un contrôle personnalisé appelé Sparkline avec une propriété de dépendance Values de type unit[]. Voici un exemple où je l'utilise dans un DataTemplate:WPF - Erreur de compilation: Les balises de type 'PropertyArrayStart' ne sont pas supportées dans les sections de template

<DataTemplate DataType="{x:Type Activity:ActivityHistory}"> 
    <Controls:Sparkline Grid.Column="1" Values="{Binding Path=Values}" /> 
</DataTemplate> 

Ce code ne compile pas. Je reçois le message d'erreur:

Tags of type 'PropertyArrayStart' are not supported in template sections.

La ligne/numéros de colonne indiquent le début de l'attribut Values.

Cela m'a vraiment impressionné. Recherche sur Google a retourné one resultJohn_C frappé exactement le même problème. Malheureusement, sa solution impliquait de déplacer le contrôle vers un assemblage séparé. Eh bien, le mien est déjà dans une assemblée séparée. Je pense que quelque chose d'autre est en jeu.

Je n'ai jamais entendu parler de PropertyArrayStart. La recherche de cela ne renvoie que quelques pages liées à la sérialisation XAML. Choses intéressantes, mais pas beaucoup d'aide. En pensant à cela, je ne peux pas penser à des propriétés de dépendance dans le framework qui ont des types de tableau. Est-ce autorisé?

J'ai également essayé d'utiliser un élément imbriqué au lieu d'une extension de balisage pour le Binding.

<DataTemplate DataType="{x:Type Activity:ActivityHistory}"> 
    <Controls:Sparkline Grid.Column="1"> 
     <Controls:Sparkline.Values> 
      <Binding Path="Values"/> 
     </Controls:Sparkline.Values> 
    </Controls:Sparkline> 
</DataTemplate> 

... toujours pas de chance.

Toutes idées reçues!

Répondre

38

Il a été 27 minutes riches en événements ... :)

Modification du type de la propriété de dépendance unit[]-IList<unit> a résolu le problème. Le meilleur de tous, il n'a pas exigé beaucoup de changements de code puisque le tableau implémente déjà cette interface.

Je ne suis pas sûr que l'envoi au tableau via l'interface (callvirt) soit plus lent. Ma conjecture est oui.

Le message d'erreur d'origine laisse entendre qu'il se passe quelque chose ici que je ne comprends pas très bien. J'accepterai toute réponse qui l'explique correctement.

+1

vous êtes mon héros. :) –

+1

J'apprécie aussi la réponse. Moi-même et tous les autres étaient sur le point de passer du temps à essayer de comprendre cela. Une recherche rapide StackOverflow était agréable à trouver à minuit. +1 – TravisWhidden