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

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

WPF ListView WrapPanel Images

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

Exception

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

Мой код & hellip;

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.

Ответы [ 15 ]

4 голосов
/ 14 марта 2010

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

<ListView Name="_details" Margin="50,0,50,0">
            <StackPanel Orientation="Vertical">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="{Binding Location.LicenseName, StringFormat='Location: {0}'}"/>
                    <TextBlock Text="{Binding Ticket.Employee.s_name, StringFormat='Served by: {0}'}"/>
                    <TextBlock Text="{Binding Ticket.dt_create_time, StringFormat='Started at: {0}'}"/>
                    <Line StrokeThickness="2" Stroke="Gray" Stretch="Fill" Margin="0,5,0,5" />
                    <ItemsControl ItemsSource="{Binding Items}"/>
                </StackPanel>
            </StackPanel>
        </ListView>

становится:

<ListView Name="_details" Margin="50,0,50,0">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="{Binding Location.LicenseName, StringFormat='Location: {0}'}"/>
                    <TextBlock Text="{Binding Ticket.Employee.s_name, StringFormat='Served by: {0}'}"/>
                    <TextBlock Text="{Binding Ticket.dt_create_time, StringFormat='Started at: {0}'}"/>
                    <Line StrokeThickness="2" Stroke="Gray" Stretch="Fill" Margin="0,5,0,5" />
                    <ItemsControl ItemsSource="{Binding Items}"/>
                </StackPanel>
        </ListView>

и все хорошо.

3 голосов
/ 17 июля 2013

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

<ComboBox 
   ItemsSource="{Binding StatusTypes}"
   DisplayMemberPath="StatusName"
   SelectedValuePath="StatusID">
   <ComboBox.SelectedValue>
      <Binding Path="StatusID"/>
   </ComboBox.SelectedValue>
   >
</ComboBox>

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

<ComboBox 
   ItemsSource="{Binding StatusTypes}"
   DisplayMemberPath="StatusName"
   SelectedValuePath="StatusID">
   <ComboBox.SelectedValue>
      <Binding Path="StatusID"/>
   </ComboBox.SelectedValue>
</ComboBox>
2 голосов
/ 22 августа 2011

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

<TreeView Height="Auto" MinHeight="100"  ItemsSource="{Binding Path=TreeNodes, Mode=TwoWay}" 
    ContextMenu="{Binding Converter={StaticResource ContextMenuConverter}}">
    ContextMenu="">
    <TreeView.ItemContainerStyle>
    ...  

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

1 голос
/ 31 марта 2011

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

       <DataGridTemplateColumn x:Name="addedDateColumn" Header="Added Date" Width="SizeToHeader">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=AddedDate}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
            <DataGridTemplateColumn x:Name="rowguidColumn" Header="rowguid" Width="SizeToHeader">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=rowguid}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
    </DataGrid>

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

0 голосов
/ 10 февраля 2014

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

<TreeView ItemsSource="{Binding MyCollection}">
    <TreeView.Resources>
        ...
    </TreeView.Resouces>>
</TreeView>

(Обратите внимание на хвост > , который интерпретируется как контент, поэтому вы устанавливаете контент в два раза ... У меня ушло немного времени:)

...