ItemsControl のサブクラスに基づいていない独自の特別な Items ベースのコントロール/パネル コンボを展開しています (ここでは説明しませんが、これを実行できない理由は複数あります) が、コントロールは処理します何千ものデータ項目があるため、Visual
仮想化を実装したいと考えています。
私たちが疑問に思っているのは、既存の ItemContainerGenerator クラスをデザインに組み込んだり、独自の仮想化方法を導入したりする方が理にかなっているということです。
一方では、ItemContainerGenerator はすでに仮想化を処理しており、非常に効率的であり、ほとんどの場合、ゼロから始めるよりも実証済みのコードの方が望ましいですが、他方では、ICG は特に使用するために設計されており、その機能に依存しています。 ItemsControl ですが、このコントロールはそうではありません。さらに、これはコンテナージェネレーターですが、この場合、データ項目を表す特定の既知のビジュアルを生成してレイアウトするだけで済みます。
さて、私は物事を単純化しすぎているかもしれませんが、ViewPort に表示されるアイテムを決定し、それらのアイテムの視覚的表現が作成、測定、配置されていることを確認し、残っているものを破棄する必要があるだけです。ビジュアルを作成しました。すべてを追跡するには、おそらく DataItem の ViewModel オブジェクトに ItemVisual 添付プロパティを使用して、単純なアイテムからビジュアルへのマッピング スキームが必要なようです。そうすれば、アイテムが削除/破壊されたときに、既存のビジュアルがあるかどうかを確認し、存在する場合はそれを破壊します。
とはいえ、独自の視覚的仮想化を簡単に展開してはならない理由を誰か思いつきますか? 繰り返しますが、ICG はこれを行いますが、それはセミを店に連れて行って卵を手に入れることなのだろうかと思っています。