WPF ListBox отображает дубликаты элементов. Как обойти? - PullRequest
5 голосов
/ 01 августа 2011

У меня есть ListBox с вложенным ListBox внутри.Оба имеют ObservableCollections в качестве своего набора ItemsSource, при этом внутренняя коллекция ListBox является элементом внешних объектов ...

Коллекции заполняются BackgroundWorker, который собирает данные из веб-службы.Мне пришлось изменить с ObservableCollection на AsyncObservableCollection, чтобы иметь возможность добавлять элементы из кода работника.Код AsyncObservableCollection находится здесь: У вас есть обновление рабочего потока ObservableCollection, которое привязано к ListCollectionView

Моя проблема заключается в том, что внутренний ListBox продолжает отображать дубликаты элементов.Кажется, будто он всегда дублирует первый элемент, если решает дублировать.Я понятия не имею, почему это происходит.С прослушивателем событий, прикрепленным к событию CollectionChanged коллекции, я обнаружил, что событие срабатывает один раз за элемент.

У вас есть идеи?

Спасибо, Стефан

Ответы [ 2 ]

1 голос
/ 18 апреля 2014

Если вы связали свой ItemsSource с AsyncObservableCollection, вы должны использовать VistualizingStackPanel для решения этой проблемы:

<ListBox
 ItemTemplate="{StaticResource YourItemTemplate}"
 ItemsSource="{Binding Path=YourAsyncObservableCollection}" 
 ScrollViewer.CanContentScroll="False"
 ScrollViewer.HorizontalScrollBarVisibility="Auto"
 ScrollViewer.VerticalScrollBarVisibility="Disabled"
 Style="{DynamicResource YourListBoxStyle}">
 <ListBox.ItemsPanel>
  <ItemsPanelTemplate>
   <VirtualizingStackPanel Orientation="Vertical" />
  </ItemsPanelTemplate>
 </ListBox.ItemsPanel>
</ListBox>
0 голосов
/ 02 августа 2011

Я обнаружил, что AsyncObservableCollection вызывает проблемы. Очевидно, это перепуталось с некоторыми событиями или чем-то еще. В итоге я добавил элементы в коллекцию в методе ProgressChanged рабочего.

...