«Элемент коллекции должен быть пустым перед использованием ItemsSource».

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

WPF ListView WrapPanel Images

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

исключение

Перед использованием 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

    

Я поставил точку останова на этой линии. ListViewImages.ItemsSource – это Nothing только перед назначением LINQ.

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

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

 [ContentPropertyAttribute("Items")] 

objective здесь заключалась в том, что представление ListView View должно быть локальным: ImageView, поэтому исправление должно явно указывать свойство, которое должно быть установлено.

Исправьте XAML, и исключение исчезнет:

      

Отсутствует .

У меня была такая же ошибка некоторое время в немного другом сценарии. я имел

    

который я исправил

      

Я просто столкнулся с ОЧЕНЬ коварным примером этой проблемы. Мой оригинальный fragment был намного сложнее, что затрудняло просмотр ошибки.

   >         

Баг? Дополнительно > после начального открытия ! Элемент < получен для встроенной коллекции Items. Когда DataContext был позже установлен, мгновенная crashola. Поэтому при отладке этой проблемы обратите внимание только на то, что вокруг вашего элемента управления данными ItemsControl окружают только ошибки.

Я тоже по другому сценарию.

             

Теперь, когда вы заканчиваете отсутствующий тег Control.ItemTemplate , все становится нормальным:

               

У меня была такая же ошибка в другом сценарии

      

Решение состояло в том, чтобы добавить тег ItemsControl.ItemsPanel перед ItemsPanelTemplate

        

исключение

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

Это исключение возникает, когда вы добавляете элементы в ItemsSource через разные источники . Поэтому убедитесь, что вы случайно не пропустили тег, неправильно разместили тег, добавили дополнительные tags или неправильно написали тег.

              

Пока ItemsControl.ItemsSource уже установлен через Binding , другие элементы (Grid, Button, …) не могут быть добавлены в исходный код. Однако, в то время как ItemsSource не используется, допускается следующий код:

       

обратите внимание на отсутствующую часть ItemsSource="{Binding MyItems}" .

Говорить ответ по-разному; убедитесь, что отсутствуют отсутствующие родительские узлы или неправильные узлы .

Это не удалось:

Ни один родитель (или неправильный родительский ItemsPanelTemplate ) для дочернего узла ItemsPanelTemplate

     ...  

Это работает:

        ...  

Храните столбец шаблона внутри DataGrid.Columns. Это помогло мне решить эту проблему.

Ссылка: DataGridTemplateColumn: коллекция элементов должна быть пуста перед использованием ItemsSource.

В моем случае это был просто дополнительный StackPanel внутри ListView:

            

становится:

          

и все хорошо.

В моем случае он не использовал DataTemplate для ItemsControl.

Старый:

       

Новое:

           

Мой был с Datagrid Style. Если вы оставите tags вокруг стиля, вы получите эту проблему. Странно, что это сработало какое-то время. Вот плохой код.

    

и хорошее

      

У меня была эта ошибка, когда я попытался применить контекстные меню к моему TreeView . Эти попытки оказались в плохом XAML, который каким-то образом скомпилировался:

  ContextMenu="">  ... 

Обратите внимание на проблемную строку: ContextMenu=""> .
Я не знаю, почему он скомпилирован, но я решил, что стоит упомянуть в качестве причины для этого загадочного сообщения об исключении. Как сказал Арментадж, внимательно осмотрите XAML, особенно в местах, которые вы недавно редактировали.

У меня была такая же ошибка. Проблема заключалась в дополнительном символе «>», добавленном по ошибке между тегами и :

     >  

и вот правильный код:

      

Возможно, не такой полезный ответ, но у меня была такая же проблема при изменении порядка столбцов и ошибка, подобная той, что приведена в следующем примере. Имея много столбцов, я переупорядочил их и как-то вставил один после закрытия тега /DataGrid.Columns :

                  

Во всяком случае, из-за этого потеряли полчаса. Надеюсь, это поможет другим.

Остерегайтесь опечаток! У меня было следующее

   ... >  

(Обратите внимание на tailing > , который интерпретируется как контент, поэтому вы дважды устанавливаете контент … Приняли меня некоторое время 🙂

Давайте будем гением компьютера.