J'essaie d'obtenir des images à afficher dans un WPF ListView stylé comme un WrapPanel, comme décrit dans cet ancien article de l'équipe ATC Avalon: Comment créer une vue personnalisée .
Lorsque j'essaie de remplir le ListView avec une collection interrogée LINQ-to-Entities d'objets ADO.NET Entity Framework, j'obtiens l'exception suivante:
Exception
La collection Items doit être vide avant d'utiliser 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 l'affectation LINQ.
J'ai eu cette même erreur pendant un certain temps dans un scénario légèrement différent. j'ai eu
que j'ai fixé pour être
la source
Je viens de tomber sur un exemple TRÈS insidieux de ce problème. Mon fragment d'origine était beaucoup plus complexe, ce qui rendait difficile de voir l'erreur.
L'insecte? Le supplément > après la
<ItemsControl>
balise d' ouverture initiale ! Le<
got appliqué à la collection Items intégrée. Lorsque le DataContext a été défini ultérieurement, crashola instantané. Recherchez donc plus que de simples erreurs entourant vos enfants de données spécifiques ItemsControl lorsque vous déboguez ce problème.la source
>
=> ExceptionMoi aussi sur un scénario différent.
Maintenant, lorsque vous avez terminé avec la balise manquante Control.ItemTemplate , tout redevient normal:
la source
<ItemsControl>
.J'ai eu cette même erreur dans un scénario différent
La solution était d'ajouter la
ItemsControl.ItemsPanel
balise avant leItemsPanelTemplate
la source
⚠️ Pour énoncer la réponse différemment ⚠️
💡 Dans Xaml, vérifiez qu'il n'y a pas de nœuds parents manquants ou de nœuds incorrects dans les zones définies.
Par exemple
Ceci échoue:
Il n'y a pas de parent approprié pour le nœud enfant ci-dessous:
ItemsPanelTemplate
Cela fonctionne:
💡 Il existe un nœud parent approprié de
<ItemsControl.ItemsPanel>
fourni ^^^. 💡la source
<DataGrid.Columns>
et contenait des colonnes de modèle directement à l'intérieur<DataGrid>
. Erreur étrange pour cela.Cette exception se produit lorsque vous ajoutez des éléments aux
ItemsSource
sources via différentes . Assurez-vous donc de ne pas avoir accidentellement manqué une balise, égaré une balise, ajouté des balises supplémentaires ou mal écrite une balise.Tant que
ItemsControl.ItemsSource
est déjà définiBinding
, d'autres éléments (Grille, Bouton, ...) ne peuvent pas être ajoutés à la source. Cependant, tant qu'ilItemsSource
n'est pas utilisé, le code suivant est autorisé :remarquez la
ItemsSource="{Binding MyItems}"
pièce manquante .la source
Conservez la colonne de modèle dans DataGrid.Columns. Cela m'a aidé à résoudre ce problème.
Ref: DataGridTemplateColumn: la collection Items doit être vide avant d'utiliser ItemsSource.
la source
Dans mon cas, c'était juste un StackPanel supplémentaire à l'intérieur de ListView:
Devient:
et tout va bien.
la source
Dans mon cas, il n'utilisait pas de DataTemplate pour ItemsControl.
Vieux:
Nouveau:
la source
Le mien était avec un style datagrid. Si vous omettez les
<DataGrid.RowStyle>
balises autour du style, vous obtenez ce problème. Ce qui est étrange, c'est que cela a fonctionné pendant un moment comme ça. Voici le mauvais code.et le bon
la source
J'ai eu la même erreur. Le problème était ce symbole supplémentaire ">" ajouté par erreur entre les balises </ComboBox.SelectedValue> et </ComboBox>:
et voici le bon code:
la source
J'ai eu cette erreur lorsque j'ai essayé d'appliquer des menus contextuels à mon
TreeView
. Ces essais ont abouti à un mauvais XAML qui s'est compilé d'une manière ou d'une autre:Notez la ligne problématique:
ContextMenu="">
.Je ne sais pas pourquoi il a été compilé, mais j'ai pensé que cela méritait d'être mentionné comme raison de ce message d'exception cryptique. Comme Armentage l'a dit, regardez attentivement le XAML, en particulier dans les endroits que vous avez récemment modifiés.
la source
J'ai rencontré cette erreur dans une autre situation. J'ai essayé de définir un style pour TreeViewItems directement dans le
<TreeView>
, mais j'aurais plutôt dû l'intégrer à l'intérieur<TreeView.ItemContainerStyle>
.Faux:
Correct:
la source
Peut-être pas une réponse si utile, mais j'ai eu le même problème lors de la modification de l'ordre des colonnes et j'ai fait une erreur comme celle de l'exemple suivant. Ayant beaucoup de colonnes, je les ai réorganisées et en ai collé une après avoir fermé la balise
/DataGrid.Columns
:Quoi qu'il en soit, perdu une demi-heure à cause de cela. J'espère que cela aide les autres.
la source
J'ai rencontré ce problème car un niveau de balise,
<ListView.View>
pour être spécifique, manquait dans mon XAML.Ce code a produit cette erreur.
Ce qui suit l'a corrigé
la source
Attention aux fautes de frappe! J'ai eu ce qui suit
(Remarquez le tailing > , qui est interprété comme du contenu, vous définissez donc deux fois le contenu ... Cela m'a pris du temps :)
la source