“Les éléments de la collection doit être vide avant d'utiliser ItemsSource.”
Je vais essayer d'obtenir des images à afficher dans un WPF ListView de style comme un WrapPanel comme décrit dans cette ancienne ATC Avalon Équipe de l'article: Comment Créer une Vue Personnalisée.
Quand j'essaie de remplir la liste avec une LINQ-to-Entités interrogées collection de ADO.NET Entity Framework objets-je obtenir de l'exception suivante:
Exception
Collection d'éléments doit être vide avant
à l'aide de ItemsSource.
Mon code...
Visual Basic
Private Sub Window1_Loaded(...) Handles MyBase.Loaded
ListViewImages.ItemsSource = From g In db.Graphic _
Order By g.DateAdded Ascending _
Select g
End Sub
XAML
<ListView Name="ListViewImages"
SelectionMode="Single"
ItemsSource="{Binding}">
<local:ImageView />
</ListView>
J'ai mis un point d'arrêt sur cette ligne. ListViewImages.ItemsSource
est Nothing
juste avant le LINQ affectation.
Vous devez vous connecter pour publier un commentaire.
La raison de cette exception est lancée, c'est que le contenu de l'élément est appliqué à la liste des Objets de collection. Ainsi, le XAML initialise la liste avec un seul local:ImageView dans sa collection d'Éléments. Mais lors de l'utilisation d'un ItemsControl vous devez utiliser les Éléments de propriété ou de la propriété ItemsSource, vous ne pouvez pas utiliser les deux en même temps. C'est pourquoi, lorsque l'ItemsSource attribut est traitée une exception est levée.
Vous pouvez vérifier la propriété du contenu d'un élément sera appliquée par la recherche de la ContentPropertyAttribute sur la classe. Dans ce cas, il est défini plus élevé dans la hiérarchie de classe, sur le ItemsControl:
L'intention ici est que la liste est Vue être fixé à un niveau local:ImageView donc la solution est d'indiquer explicitement la propriété à définir.
Fixer le XAML et l'exception disparaît:
Il manquait que
<ListView.View>
tag.J'ai eu ce même message d'erreur pour un temps un peu différente de scénario. J'ai eu
que j'ai fixée pour
Je viens de tomber sur un TRÈS insidieuse exemple de ce problème. Mon fragment d'origine était beaucoup plus complexe, qui fait qu'il est difficile de voir l'erreur.
Le bug? L'extra > après l'ouverture initiale
<ItemsControl>
tag! Le<
ai appliqué à la fonction intégrée dans les Éléments de la collection. Lorsque le DataContext est plus tard, l'instant crashola. Si regarder dehors pour plus que juste des erreurs d'entourer votre ItemsControl données spécifiques des enfants lors du débogage de ce problème.>
=> à l'Exception du//
. Accidentellement commenté xaml avec C# style de commentaires.Moi aussi sur un scénario différent.
Maintenant, lorsque vous remplissez avec la balise manquante de Contrôle.ItemTemplate, tout est normal:
<ListView>
ce qui manque<ListView.ItemTemplate>
ou un<ListBox>
manque un<ListBox.ItemTemplate>
.<ItemsControl>
.J'ai eu ce même message d'erreur dans un autre scénario
La solution était d'ajouter le
ItemsControl.ItemsPanel
balise avant leItemsPanelTemplate
Cette exception se produit lorsque vous ajoutez des éléments à la
ItemsSource
par le biais de différentes sources. DoncAssurez-vous que vous n'avez pas accidentellement raté une balise mal placée un tag, ajout de balises supplémentaires, ou miswrote une balise.
Tout
ItemsControl.ItemsSource
est déjà défini parBinding
, d'autres éléments (de la Grille, Bouton, ...) ne peuvent pas être ajoutés à la source.Cependant, alors que les
ItemsSource
est pas en cours d'utilisation le code suivant est permis:avis le manque
ItemsSource="{Binding MyItems}"
partie.À l'état de répondre différemment; vérifier il y a ne Manque pas de Nœuds Parents ou incorrecte nœuds.
Cet Échec:
Pas de parent (ou de la mauvaise mère) pour la
ItemsPanelTemplate
nœud enfantCela A Fonctionné:
<DataGrid.Columns>
et avaient modèle de colonnes directement à l'intérieur de<DataGrid>
. Bizarre d'erreur pour que.Garder le modèle de la colonne à l'intérieur de grille de données.Les colonnes. Cela m'a aidé à résoudre ce problème.
Ref: DataGridTemplateColumn : collection d'Éléments doit être vide avant d'utiliser ItemsSource.
Dans Mon cas, c'était juste un supplément de StackPanel à l'intérieur de la liste:
Devient:
et tout est bien.
Dans mon cas, il n'était pas à l'aide d'un DataTemplate pour le ItemsControl.
Vieux:
Nouveau:
Le mien était avec un datagrid Style. Si vous laissez de côté le
<DataGrid.RowStyle>
balises autour du Style que vous obtenez ce problème. Bizarre, c'est qu'il a travaillé pendant un certain temps comme ça. Ici, c'est le mauvais code.et la bonne
J'ai eu le même message d'erreur. Le problème était extra ce symbole ">" ajouté par erreur entre les balises </zone de liste déroulante.SelectedValue> et </ComboBox>:
et voici le bon code:
J'ai eu cette erreur quand j'ai essayé d'appliquer les menus contextuels à mon
TreeView
. Ceux essaie retrouvé dans une mauvaise XAML qui a compilé en quelque sorte:Note de la ligne problématique:
ContextMenu="">
.Je ne sais pas pourquoi il a compilé, mais j'ai pensé qu'il convient de mentionner en raison de cette énigmatique message d'exception. Comme Armentage dit, regardez autour de la XAML avec soin, surtout dans les endroits que vous avez récemment modifié.
Peut-être pas une réponse utile, mais j'ai eu le même problème lors de la modification de l'ordre des colonnes et fait l'erreur comme dans l'exemple suivant. Avoir un grand nombre de colonnes, je réorganisées et en quelque sorte collés l'un après la balise de fermeture
/DataGrid.Columns
:De toute façon, perdu une demi-heure à cause de cela. Espérons que cela aide les autres.
Méfiez-vous des fautes de frappe! J'ai eu la suivante
(Avis de la filature >, ce qui est interprété comme contenu, de sorte que la configuration de deux fois le contenu... m'a fallu un certain temps 🙂