2013-02-19 14 views
5

DataTableにItemsSourceを設定したDataGridがあります。 DataTableには24の列と〜1600の行が格納されています(実際にはもっと多くの行を後でロードする必要がありますが、今のところこれは面倒です)。WPF DataGrid仮想化が正しく機能していませんか?

アクティブな列と行の仮想化の設定にもかかわらず、DataGridはこれらの1600行を表示するのに約30秒かかります。 その後、縦方向のスクロールはうまく動作し、横方向のスクロールは遅くなります。

メモリプロファイラを実行すると、アプリケーションで使用されるメモリの大部分がDataGridCells、Borders、ContentPresenters、Textblocksから取得されていることを確認できます。私にとって、これはグリッドが行を適切に仮想化していないことを示しています。

DataGridの仮想化に問題があることを誰でも確認できますか?あるいは、このコントロールの実装に悪名高いトラップがありますか?

あらゆる入力/提案を楽しみにしています。ありがとう:)

+0

すべての列が標準列であるか、テキストのみを意味するのか、その中には「CheckBoxes」などのコントロールを含むものがありますか? – DHN

+0

いいえ、2つはチェックボックスです。 –

+0

ええと、それを試して、これらの2つの列を削除するか、外観を「標準」に変更してください。 – DHN

答えて

5

私はこの問題を解決しました。 私のDataGridは、無限に伸びるScrollViewerの中に座っていました。だから、すべてが目に見えると思ってしまったので、そのアイテムを仮想化しないのです。 ScrollViewerを削除しました(とにかくスクロールバーがあるDataGrid)、今は完璧に動作します。

1

うーん、私はなぜ分かりませんが、明らかに私はここに答えを投稿するためにいくつかの接着剤のテキストを追加する必要があります。たぶん、これはSO answerあなたを助けるでしょう。

編集

私はあなたのアプローチについて考えることをお勧めしたいのですが、追加のアドバイスとして。 DataGridに1.6k以上のアイテムを追加することは本当に必要ですか?おそらく、遅延ロードについて考えるべきでしょう。

+1

はい、私はこれについて考えました。不思議なことに、Winforms DataGridが正しく機能しているようです。 –

+0

さて、答えのリンクはどうですか? – DHN

+0

チェックボックスは問題ではないようです。列を削除しても、そのトリックはありませんでした。 –

関連する問題