2009-09-07 11 views
32

ItemsControlの仮想化スタックパネルの実装方法について、MVVMのObservableCollectionにバインドしたいと思います。パフォーマンスを向上させるためのWPF VirtualizingStackPanel

ItemsControlが大きくなると、タブコントロール内の各タブにItemsControlインスタンスがあり、切り替えタブが非常に遅くなります。

私はアプリをスピードアップするために何ができますか?

私はWPFプロファイラを開き、各タブのItemsControlに表示される各要素(カスタムユーザーコントロール)が独自のContentPresenterを持っていることがわかりました。 MVVMのObservableCollectionには100項目のコンテンツプレゼンターが100人いました。これは正しいですか?どのように最適化できますか?

答えて

48

大きな助けになる2つの手法があります。両方ともBea Stolnitzによって彼女のblogに非常によく説明されています。

最初はUI Virtualization であり、第二には、あなたはUIが少ないものを描く作るためにVirtualizingStackPanelのようなものを使用してUIの仮想化でData Virtualization

です。

データの仮想化は、あなただけの100

を表示しようとしているときに、メモリに百万のオブジェクトを持っていない確認しますので、UIの仮想化は、描かれたものの数を最小化し、データの仮想化は、その可能性のものの数を最小限に抑えます描画されます。

9

私は正確なTabControlのデータグリッドを使用してWPF IND同じ問題を抱えていたのに役立ちます

希望。 DataGridの要素サイズを大きくすると、タブの切り替えが非常に遅くなります。その後、私はこの記事がBea Stolnitzのブログを読んでいたことを、前の答えで推測しました。ソリューション:-))

http://groups.google.com/group/wpf-disciples/browse_thread/thread/6f3531a1720252dd

彼は問題を正確に記述しています.... PERFヒット:それは私に私にDrWPFへのリンクを提供します 「TabControlのVirtualizingStackPanel WPF」Googleにヒントを与えました木の建設中です。あなたがのTabControlののItemsSource
プロパティにバインディングを持つ典型的なMVVMのアプローチを使用している
場合は残念ながら、ツリー全体がタブ項目が選択されるたび
を再構築する必要があります。これは通常非常に高価な操作です。 ....

関連する問題