“La raccolta degli articoli deve essere vuota prima di usare ItemsSource.”

Sto cercando di far visualizzare le immagini in un ListView WPF in stile WrapPanel come descritto in questo vecchio articolo del team ATC Avalon: Come creare una vista personalizzata .

WPF ListView Immagini WrapPanel

Quando provo a popolare il ListView con una raccolta interrogata LINQ-to-Entities di oggetti ADO.NET Entity Framework ottengo la seguente eccezione:

Eccezione

La raccolta degli articoli deve essere vuota prima di utilizzare ItemsSource.

Il mio codice …

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

    

Ho messo un punto di interruzione su quella linea. ListViewImages.ItemsSource è Nothing poco prima dell’assegnazione LINQ.

Il motivo per cui questa particolare eccezione viene generata è che il contenuto dell’elemento viene applicato alla raccolta di oggetti di ListView. Quindi XAML inizializza ListView con un singolo locale: ImageView nella sua raccolta di articoli. Ma quando si utilizza ItemsControl è necessario utilizzare la proprietà Items o la proprietà ItemsSource, non è ansible utilizzarli contemporaneamente. Quindi quando viene elaborato l’attributo ItemsSource viene generata un’eccezione.

Puoi scoprire a quale proprietà verrà applicato il contenuto di un elemento cercando il ContentPropertyAttribute nella class. In questo caso è definito più in alto nella gerarchia di classi, su ItemsControl:

 [ContentPropertyAttribute("Items")] 

L’intenzione era che la vista di ListView fosse impostata su un locale: ImageView in modo che la correzione indichi esplicitamente la proprietà da impostare.

Risolvi XAML e l’eccezione scompare:

      

Mancava quel tag .

Ho avuto questo stesso errore per un po ‘in uno scenario leggermente diverso. avevo

    

che ho stabilito di essere

      

Mi sono imbattuto in un esempio MOLTO insidioso di questo problema. Il mio frammento originale era molto più complesso, il che rendeva difficile vedere l’errore.

   >         

Il bug? L’extra > dopo l’etichetta iniziale ! < è applicato alla raccolta di elementi incorporata. Quando il DataContext è stato successivamente impostato, crash crash istantaneo. Quindi, quando esegui il debug di questo problema, fai attenzione agli errori che circondano i dati specifici di ItemsControl.

Anch’io su uno scenario diverso.

             

Ora quando completi il ​​tag mancante Control.ItemTemplate , tutto diventa normale:

               

Ho avuto lo stesso errore in uno scenario diverso

      

La soluzione era aggiungere il tag ItemsControl.ItemsPanel prima di ItemsPanelTemplate

        

Eccezione

La raccolta degli articoli deve essere vuota prima di utilizzare ItemsSource.

Questa eccezione si verifica quando si aggiungono elementi a ItemsSource attraverso diverse fonti . Quindi, assicurati di non aver perso per sbaglio un tag, di aver collocato un tag in modo errato, di aver aggiunto tag aggiuntivi o di aver sbagliato a scrivere un tag.

              

Mentre ItemsControl.ItemsSource è già impostato tramite Binding , non è ansible aggiungere altri elementi (Grid, Button, …) all’origine. Tuttavia, mentre ItemsSource non è in uso , è consentito il seguente codice:

       

nota la parte ItemsSource="{Binding MyItems}" mancante ItemsSource="{Binding MyItems}" .

Per affermare la risposta in modo diverso; verificare che non vi siano nodes padre mancanti o nodes errati .

Questo non è riuscito:

Nessun genitore (o genitore errato) per il nodo figlio ItemsPanelTemplate

     ...  

Questo ha funzionato:

        ...  

Mantieni la colonna del modello all’interno di DataGrid.Columns. Questo mi ha aiutato a risolvere questo problema.

Rif: DataGridTemplateColumn: la raccolta di elementi deve essere vuota prima di utilizzare ItemsSource.

Nel mio caso, era solo uno StackPanel extra all’interno di ListView:

            

diventa:

          

e tutto va bene.

Nel mio caso, non stava usando un DataTemplate per ItemsControl.

Vecchio:

       

Nuovo:

           

Il mio era con uno stile datagrid. Se si tag attorno allo stile, si ottiene il problema. La cosa strana è che ha funzionato per un po ‘in quel modo. Ecco il codice cattivo.

    

e il bene

      

Ho avuto questo errore quando ho provato ad applicare i menu contestuali al mio TreeView . Questi tentativi sono finiti in un cattivo XAML che ha compilato in qualche modo:

  ContextMenu="">  ... 

Notare la riga problematica: ContextMenu=""> .
Non so perché sia ​​stato compilato, ma ho pensato che valesse la pena di menzionare questo messaggio di eccezione criptico. Come ha detto l’Armentage, guarda attentamente l’XAML, specialmente nei luoghi che hai modificato di recente.

Ho avuto lo stesso errore. Il problema era questo simbolo extra “>” aggiunto per errore tra i tag e :

     >  

e qui è il codice corretto:

      

Forse non è una risposta così utile, ma ho avuto lo stesso problema quando ho cambiato l’ordine delle colonne e ho commesso un errore simile a quello del seguente esempio. Avendo un sacco di colonne, le ho riordinate e in qualche modo incollate una dopo aver chiuso il tag /DataGrid.Columns :

                  

Comunque, ha perso mezz’ora a causa di questo. Spero che questo aiuti gli altri.

Attenzione agli errori di battitura! Ho avuto il seguente

   ... >  

(Notare il tailing > , che è interpretato come contenuto, quindi stai impostando il doppio del contenuto … Ci ho messo un po ‘:)