4

私は内部に入れ子のListBoxを持つListBoxを持っています。どちらもObservableCollectionsがItemsSourceとして設定され、内側のListBoxのコレクションが外側のオブジェクトのメンバーになります。WPF ListBoxは重複した項目を表示します。どのように回避するには?

コレクションは、Webサービスからデータを収集するBackgroundWorkerで埋められます。私は、ワーカのコード内から項目を追加できるようにObservableCollectionからAsyncObservableCollectionに変更しなければなりませんでした。 AsyncObservableCollectionコードはここからです:Have worker thread update ObservableCollection that is bound to a ListCollectionView

私の問題は、内側のリストボックスが重複アイテムを表示し続けることです。重複すると決めると、常に最初の項目が重複しているようです。私はこれがなぜ起こるのかを知りません。イベントリスナーがコレクションのCollectionChangedイベントにアタッチされると、イベントがアイテムごとに1回細かく発火していることがわかりました。

ご意見はありますか?

おかげで、 ステファン

+1

あなたがここに私たちにいくつかの詳細を与えるために持ってしようとしています。可能な限り小さな例に減らし、この問題を解決してから、すべてのコードを含めるように質問を更新してください。 – ColinE

+0

残念ながら、私は小さな例で動作を再現することができませんでした。それ以外では、自分のコードをネットに吹き飛ばすことは許されていないので、私は自分自身でこの問題に対処しなければならないと思います。とにかく助けてくれた皆様に感謝します;) – sjanz

答えて

0

私はAsyncObservableCollectionが問題を引き起こしていることが分かりました。明らかに、それはいくつかの出来事や何かを混乱させました。 私は、作業者のProgressChangedメソッドでアイテムをコレクションに追加しました。

1

あなたがAsyncObservableCollectionにあなたのItemsSourceをバインドする場合は、この問題を修正するために、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> 
関連する問題