Ошибка WPF:«Перед использованием ItemsSource коллекция предметов должна быть пустой».

StackOverflow https://stackoverflow.com/questions/1087944

  •  23-08-2019
  •  | 
  •  

Вопрос

Кто-нибудь знает, почему я продолжаю получать сообщение об ошибке «Коллекция предметов должна быть пустой перед использованием ItemsSource»?

Вот код:

        <ScrollViewer Margin="8,8,8,8" Grid.Row="3" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">                  
                <WrapPanel Orientation="Vertical">
                    <ItemsControl ItemsSource="{Binding}" x:Name="CustomerList" >>
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <WrapPanel Orientation="Horizontal">
                                </WrapPanel>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <View:UserControlCustomerDetails>
                                </View:UserControlCustomerDetails>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </WrapPanel>
            </ScrollViewer>

Вот что я делаю в своем коде:

 CustomerList.ItemsSource = _mainViewModel.CustomerCollection;

Обратите внимание, что CustomerCollection — это просто список.<Customers>.

Спасибо за вашу помощь!

Ваше здоровье

Это было полезно?

Решение

Этот код скопирован дословно?У вас действительно есть две прямоугольные скобки (>>) в конце <ItemsControl... линия?Если да, то вторая правая угловая скобка может рассматриваться как текстовое содержимое, которое добавляется в коллекцию Items.

Другие советы

Сначала удалите ItemsSource="{Binding}" из вашего ItemsControl.Я считаю, что это должно исправить вашу ошибку.

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

Судя по всему, вы используете шаблон MVVM.В этом случае вам не следует явно назначать коллекцию ItemsSource свойство...вместо этого вам следует назначить ViewModel для DataContext принадлежащий Window (или UserControl).Если ваш DataContext является _mainViewModel, ваша привязка должна быть:

<ItemsControl ItemsSource="{Binding CustomerCollection}" ...

Использовать DataGrid.Items.Clear();Надеюсь, это будет полезно...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top