0

IList (および IEnumerable ではない) を実装するカスタム ItemsSource にバインドされた WPF DataGrid を使用しています。カスタム ItemsSource はデータの仮想化を実行し、必要に応じて項目のページのみを読み込みます。MyDataGrid は実際には DataGrid から継承し、DataGrid の並べ替えメソッドの処理をオーバーライドして、並べ替え中にデータの仮想化を維持できるようにします。MyDataGrid の UI 仮想化を有効にしました。

アプリケーションを実行すると、MyDataGrid は問題なく表示され、約 20,000 個のアイテムがあることがわかり、ItemsSource に最初の 20 個程度のアイテムのみを要求します。次に、列ヘッダーをクリックしてさまざまな列を並べ替えることができます。また、MyDataGrid が最初の 20 程度のみを更新するように要求したため、ItemsSource は 40 項目の最初のページを再読み込みするだけで済みます。

しかし、姓の列をクリックして並べ替えると、MyDataGrid は UI の仮想化を失い、最初の 20 個程度しか必要としないにもかかわらず、ItemsSource にすべての項目を読み込むように要求します。インデックス(this [0])ですべてのアイテムを要求するのを見ることができます。

ICollectionView、UI 仮想化、およびデータ仮想化を調査してみましたが、それが適用される可能性があると思われる唯一のことは、複数の行選択に関するものです (データ仮想化を使用した DataGrid 行要求パターンで、 MyDataGrid の SelectionMode を Single に設定したので、これは当てはまりません。

もう 1 つのヒントは、姓で並べ替える前に、MyDataGrid の最初の項目の姓が V の文字で始まること (アルファベットの最後) であり、実際に姓の降順でリストを並べ替えることができることです。仮想化を失うことなく。S で始まる最初の項目を持つ Title 列でも同じことが起こります。他の列では問題はありません。

何か案は?

4

1 に答える 1