“在使用ItemsSource之前,項目集合必須為空。”

.net binding entity-framework vb.net wpf

我正在嘗試將圖像顯示在WPF ListView中,其風格類似於WrapPanel,如舊的ATC Avalon團隊文章中所述: 如何創建自定義視圖

WPF ListView WrapPanel圖像

當我嘗試使用LINQ-to-Entities查詢的ADO.NET Entity Framework對象集合填充ListView時,我得到以下異常:

例外

在使用ItemsSource之前,項集合必須為空。

我的代碼......

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>

我在那條線上放了一個斷點。 ListViewImages.ItemsSource在LINQ賦值之前是Nothing

一般承認的答案

拋出此特定異常的原因是元素的內容應用於ListView的Items集合。因此,XAML在其Items集合中使用單個本地:ImageView初始化ListView。但是當使用ItemsControl時,您必須使用Items屬性或ItemsSource屬性,不能同時使用它們。因此,當處理ItemsSource屬性時,將引發異常。

您可以通過查找類中的ContentPropertyAttribute來找出元素內容將應用於哪個屬性。在這種情況下,它在類層次結構中的ItemsControl上定義得更高:

[ContentPropertyAttribute("Items")]

這裡的意圖是將ListView的View設置為local:ImageView,因此修復是明確指示要設置的屬性。

修復XAML,異常消失:

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

它缺少<ListView.View>標籤。


熱門答案

在一個稍微不同的場景中,我有一段時間出現同樣的錯誤。我有

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

我固定的是

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


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因