Msgstr "Коллекция предметов должна быть пустой перед использованием ItemsSource."

.net binding entity-framework vb.net wpf

Вопрос

Я пытаюсь получить изображения для отображения в WPF ListView, стилизованном под WrapPanel, как описано в этой старой статье команды ATC Avalon: Как создать пользовательское представление

WPF ListView WrapPanel Изображения

Когда я пытаюсь заполнить ListView набором запросов объектов LINO-to-Entities объектов ADO.NET Entity Framework, я получаю следующее исключение:

исключение

Коллекция предметов должна быть пустой перед использованием 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 - это Nothing непосредственно перед назначением LINQ.

Принятый ответ

Причина, по которой выбрасывается это конкретное исключение, заключается в том, что содержимое элемента применяется к коллекции элементов ListView. Таким образом, XAML инициализирует ListView с одним локальным: ImageView в своей коллекции Items. Но при использовании ItemsControl вы должны использовать либо свойство Items, либо свойство ItemsSource, вы не можете использовать оба элемента одновременно. Следовательно, когда обрабатывается атрибут ItemsSource, генерируется исключение.

Вы можете узнать, к какому свойству будет применяться содержимое элемента, поищя ContentPropertyAttribute в классе. В этом случае он определен выше в иерархии классов, на ItemsControl:

[ContentPropertyAttribute("Items")]

Предполагалось, что View для ListView будет установлен локально: 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
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow