2

を使用しDataGridていCellEditingTemplatesます。データ仮想化コレクションが使用されるためItemsSource(AlphaChiTech ソリューション)、オンデマンドで一度に 100 アイテムのサイズのページのみをフェッチします。

セルが編集フォームにダブルクリックされ、VirtualizingStackPanelすべてのアイテムが次々と要求されるまで、うまく機能します。もちろん副作用として、最終的にはすべてのページが要求されます。

この問題を回避する方法はありますか?

編集:

私の状況で人々を助けるかもしれない回避策を見つけました:

最終的に、編集フォームに切り替えた後、行の高さが同じままであるという条件の下で、VirtualizingStackPanel がすべての項目を要求していないことがわかりました。回避策の前は、私の編集フォームはわずかに高かったです。

ここで、編集フォームに切り替えても高さが変わらないように、セル (通常と編集の両方) のコントロールの MinHeight を設定します。

残念ながら、これは特定の条件下でのみ機能します。動作しない場合があります:

  • を使用してRowDetailsTemplateいます。見えるようになるとすぐに、仮想化が壊れます。行の詳細は行自体に属していると想定しているため、行の高さが再び増加します。

  • Collection の Reset イベントをそれぞれ CollectionView で発生させます。私の経験では、これは一般的に を使用したデータ仮想化のキラーですDataGrids

  • コレクションの値を下げCountます (これも、Reset イベントを問題なくスローします)。

Countコレクションのを増やすことが効果的だったのは興味深いことです。Countしかし、すぐに使用できる Reset イベントを発生させずに を変更する方法がないため (少なくとも私は見つけられませんでした)、AlphaChiTech の機能を強化する必要がありました (幸い、ソースは github にあります)。また、DataGrid'sアイテムはその後すぐに更新する必要がありますItemsControl。そうしないと、 とコレクションが矛盾した状態にあることを示す例外がスローされます。

行の詳細はオプションですが、データ仮想化を壊さずにアイテムを削除することは非常に重要です。したがって、問題はまだ残っています。私の回避策は、固定サイズのコレクションを持つ人々に役立つ可能性が最も高いですが、残念ながら私には役に立ちません。

4

1 に答える 1