"Die Objektauflistung muss leer sein, bevor ItemsSource verwendet werden kann."

.net binding entity-framework vb.net wpf

Frage

Ich versuche Bilder in einer WPF-ListView anzuzeigen, die wie ein WrapPanel gestaltet ist, wie in diesem alten ATC Avalon Team-Artikel beschrieben: Erstellen einer benutzerdefinierten Ansicht

WPF ListView WrapPanel-Bilder

Wenn ich versuche, die ListView mit einer LINQ-to-Entities-Abfrage von ADO.NET Entity Framework-Objekten aufzufüllen, erhalte ich die folgende Ausnahme:

Ausnahme

Die Elementauflistung muss leer sein, bevor ItemsSource verwendet werden kann.

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

Ich habe einen Haltepunkt in diese Zeile gesetzt. ListViewImages.ItemsSource ist Nothing kurz vor der LINQ - Zuordnung.

Akzeptierte Antwort

Der Grund für diese bestimmte Ausnahme ist, dass der Inhalt des Elements auf die Elementauflistung von ListView angewendet wird. Daher initialisiert die XAML die ListView mit einem einzigen lokalen ImageView in der Items-Auflistung. Wenn Sie jedoch ein ItemsControl verwenden, müssen Sie entweder die Items-Eigenschaft oder die ItemsSource-Eigenschaft verwenden. Sie können nicht beide gleichzeitig verwenden. Wenn das ItemsSource-Attribut verarbeitet wird, wird daher eine Ausnahme ausgelöst.

Sie können herausfinden, auf welche Eigenschaft der Inhalt eines Elements angewendet wird, indem Sie nach ContentPropertyAttribute für die Klasse suchen. In diesem Fall ist es definiert höher in der Klassenhierarchie, auf der Itemscontrol:

[ContentPropertyAttribute("Items")]

Die Absicht hier war, dass die ListView-Ansicht auf ein lokales ImageView gesetzt wird. ImageView, damit der Fix explizit die Eigenschaft angibt, die gesetzt werden soll.

Korrigieren Sie die XAML und die Ausnahme verschwindet:

<ListView Name="ListViewImages"
          SelectionMode="Single"
          ItemsSource="{Binding}">
    <ListView.View>
        <local:ImageView />
    </ListView.View>
</ListView>

Es fehlte das <ListView.View> -Tag.


Beliebte Antwort

Ich hatte den gleichen Fehler eine Weile in einem etwas anderen Szenario. ich hatte

<wpftoolkit:DataGrid
    AutoGenerateColumns="False"
    ItemsSource="{Binding Path=Accounts}" >
    <wpftoolkit:DataGridTextColumn 
        Header="Account Name" 
        Binding="{Binding Path=AccountName}" />
</wpftoolkit:DataGrid>

was ich fixiert habe

<wpftoolkit:DataGrid
    AutoGenerateColumns="False"
    ItemsSource="{Binding Path=Accounts}" >
    <wpftoolkit:DataGrid.Columns>
        <wpftoolkit:DataGridTextColumn 
            Header="Account Name" 
            Binding="{Binding Path=AccountName}" />
    </wpftoolkit:DataGrid.Columns>
</wpftoolkit:DataGrid>


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum