3

リストボックスに1000個のアイテムを入力するシナリオがあります。ItemsSourceデータのソースを使用してプロパティを設定しました。

UIが読み込まれるときに、特定の基準に基づいてリストボックスの項目を削除する必要があるという要件があります。アタッチされたプロパティのコールバックメソッドでの設定ContentTemplateによって同じことを実現するために、スタイルとアタッチされたプロパティを使用しています。ListBoxItem

私の問題は、リストの最後にあるアイテムに対してListBoxItemusingを生成しようとすると、nullになることです。ItemContainerGenerator.ContainerFromItemその結果、リストの一番下にあるリストボックスの項目を削除できません。

仮想化と関係がありますか。ListBoxItems負荷のあるものをすべて入手したい。

回避策はありますか?

ありがとう

4

1 に答える 1

3

これは間違いなく仮想化が原因です。これはまさにUI仮想化が行うことになっていることです-ListBoxItem画面に表示されているアイテムのオブジェクトのみを作成します。VirtualizingStackPanel.IsVirtualizing = falseを設定すると、これが実際に原因であることが簡単にわかり、が返されないことがListBoxわかります。ItemContainerGenerator.ContainerFromItemnull

必要に応じてアイテムを削除するロジックを持つスタイルを自分ListBoxItemsで設定できます。ListBoxこれは、仮想化が有効になっている場合にも機能するはずです。例えば:

<ListBox>
    <ListBox.Resources>
        <Style TargetType=ListBoxItem>
            ...
        </Style>
    </ListBox.Resources>
</ListBox>
于 2012-08-16T07:41:54.590 に答える