4

我有一個ListBox裏面有一個嵌套ListBox。兩者都有ObservableCollections作爲它們的ItemsSource集,內部ListBox的集合是外部對象的成員...WPF ListBox顯示重複的項目。如何解決?

集合由一個BackgroundWorker填充,它從Webservice收集數據。我不得不從ObservableCollection更改爲AsyncObservableCollection,以便能夠從工作者代碼中添加項目。 AsyncObservableCollection代碼從這裏:Have worker thread update ObservableCollection that is bound to a ListCollectionView

我的問題是,內部列表框保持顯示重複的項目。它似乎總是重複第一個項目,如果它決定重複。我不知道爲什麼會發生這種情況。通過將一個事件監聽器附加到集合的CollectionChanged事件中,我發現每個項目都會觸發該事件。

你有什麼想法嗎?

感謝, 斯蒂芬

+1

你將要在這裏給我們一些更多的細節。嘗試將代碼縮小到仍然存在此問題的最小可能示例,然後更新您的問題以包含所有代碼。 – ColinE

+0

不幸的是,我無法重現一個小例子中的行爲。除此之外,我不允許向網絡發送我的代碼,所以我想我必須自己處理這個問題。感謝所有無論如何都會幫助的人;) – sjanz

回答

0

我發現了AsyncObservableCollection引起的問題。顯然它與一些事件或任何事情搞砸了。 我最終將項目添加到工作人員的ProgressChanged方法中的集合中。

1

如果你的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>