2011-02-04 5 views
4

私はWPF/.NET 4を使用しています.VirtualizingStackPanel.VirtualizationMode = "Recycling"プロパティをListBoxに追加すると、スクロール時に何度も何度も繰り返されるアイテム。たとえば、100個のアイテムを持つListBoxがあり、一度に10個が表示されているとします。リストボックスが最初にロードされるとき、アイテム1〜10が表示されますが、スクロールして残りのアイテム11〜100を表示すると、スクロールするとアイテム1〜10が繰り返し表示されるため、アイテムを表示できませんリサイクルをスタンダードに戻すと、すべて正常に動作しますが、スクロールはひどく遅いです(ListItemはかなり複雑で、いくつかの画像、テキストフィールド、ボタンがあります)。リサイクルをオンにすると、スクロールは高速ですが、アイテム1〜10を見ることしかできません。何が間違っているのか、それを修正する方法はありますか?前もって感謝します。WPF ListBox VirtualizingStackPanel.VirtualizationStackPanel.VirtualizationMode = "リサイクル"により、同じリストアイテムが常に表示される

+0

商品アイテムのデータがありますか?綴じはどのように行われますか? ViewModel経由ですか?また、これらのアイテムは、Data/ControlTemplate、ItemContainer、またはUserControlを介して作成されていますか? – CodeWarrior

+0

リストボックスの中にはデータバインドされているものと、コードビハインドからItemsSourceを設定したものの両方がありますが、どちらもこの問題を抱えています。そしてそれらのすべては、DataTemplateを使用して顧客のUser Controlを表示します。その値はListBoxItemの値を使用して設定されます。 – deadlydog

答えて

5

リサイクルモードは、その名前が示すように、レンダリングされたListBoxItemを再利用することによって機能します。 ListBox項目が、リストからスクロールされた項目を表示するために必要なくなった場合、ListBox項目は、スクロールして表示された項目を表示するために再利用されます。

ListBoxItemが表示している内容を変更するために、ListBoxは単純にそのDataContextプロパティを新しい項目に設定します。これには、ListBoxItemの内容がDataContextChangedイベントに正しく応答する必要があります。データバインディングのみを使用してコントロールにデータを入力する場合、これは自動的に行われます。しかし、あなたのコメントが暗示するように、コードビハインドを使用してプロパティを更新している場合は、イベント処理コードがその仕事をしていることを確認する必要があります。

関連する問題