2011-01-05 11 views
13

TreeViewを仮想化するには良い方法を考え出していますが、データは非常に軽い(1項目あたり約16バイト)ため、実際には問題ではありません。実際のデータは160 KBのメモリしか必要としませんが、ツリービューの項目はもっと多くのメモリを使用します。私たちは3つの異なるツリー、WPF、Infragistics、Telerikで仮想化を試みました。 、スクロールバーがいくつかの奇妙な挙動を示しているたくさんの周りにジャンプし、変更がないマウスでドラッグしてスクロールし、矛盾サイズ:TreeView Virtualization

WPF TreeView:それらのすべてが我々のアプリケーションのためにそれらが使用できなくなり、その大きな問題を抱えています正常に動作することはTelerik

を(前後にジャンプ):アイテムは、スクロールバーがあまりにも不安定で、消え、アイテムはランダムにスタイルが

インフラジスティックスを動作しない、崩壊を展開します。アイテムは、全てでは仮想化されていません、すべてのアイテムは仮想化は役に立たない。

私たちはこれを2〜3ヶ月間苦労しており、良い解決策を見つけることができませんでした。 9000以上のアイテムを持つTreeViewに仮想化を導入しましたか?もしそうなら、あなたの戦略は何ですか?第三者コントロールを使用しましたか?それは100%働いたのですか?

非常に感謝しています。

ありがとうございました。

+1

1フィルタリングに非常に応答性である、すべてのものを試してみましたが、スクロールが関与しているときの動作は依然として不安定です。 – BrokenGlass

+0

@BrokenGlass質問をサポートしてくれてありがとう。私はこのために良い解決策を得ることを願っています。 – Carlo

+0

私の関連する質問はこちら(明らかにw/o答え):http://stackoverflow.com/questions/4074475/scrolling-bug-in-wpf-virtualized-treeview – BrokenGlass

答えて

5

ListViewを使用し、UI仮想化を使用すると効果的です。

http://www.beacosta.com/blog/?p=45

私はバッキングICollectionView 10万個のアイテムを得ている、それは私がWPF仮想化されたツリービューと同じ問題を抱えているなど、まだ

+0

これは、仮想化されたTreeviewsのボックスの外では機能しないのは悲しいです。代わりに、これらの種類のトリックを使用する必要があります – BrokenGlass

+0

しかし、彼女は、このソリューションは、TreeViewが仮想化前3.5を持っていなかったので、本当に問題を解決します。私はすぐにそれを提案していただきありがとうございます。 – Carlo

+0

私は、TreeViewでv4.0を実行しているUI仮想化を使用していましたが、それでもパフォーマンスはあまり良くありませんでした。その理由は、TreeViewを使用して仮想化を破るのは簡単だということが判明しました。 ListViewを使用すると、これらの制限を回避できます。 – codekaizen

2

私たちも同様の状況にあり、Syncfusionツリービューを使用しようとしましたが、それは哀れでした。私たちは他の第三者のコントロールを選択しなかったため、より良い解決策はありませんでしたので、最終的には仮想化と負荷オンデマンド(Lazyローディング)を一緒に解決しました。

一般的に、すべてのノードは任意の時点では展開されません。これにより、スクロールの問題がある程度解消され、ほとんどのシナリオでアプリケーションを使用できるようになります。私たちはまだ数字を超えており、より良い解決策を探し続けています。

Need a sample for WPF TreeView search with Virtualization and Load On Demand

- 私は が デマンド(遅延ロード)に仮想化と負荷の両方を使用していることをここで言及したいと思います

は、一緒にその 自身の副作用を持っています。

ロードオンデマンドを実現するためのいくつかのサンプル - 私たちは、中のアイテムをインデントのビー コスタの Stollnitzのトリックを使用しました

http://www.codeproject.com/KB/WPF/WPF_Explorer_Tree.aspx

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/1eb3ed3d-6379-4353-9f35-2c0aecb885f2/

http://www.telerik.com/help/wpf/radtreeview-features-load-on-demand.html

+0

私は仮想化とロードオンデマンドを組み合わせようとしましたが、残念ながら、(WPFとTelerikのTreeViewsで少なくとも)バインディングするときにのみ、アイテムを作成すると仮想化は機能しません。そのため、そのオプションからも手を離さなければなりませんでした。潜在的に何千ものアイテムが展開されている可能性があります。これは、メモリ内に何千ものTreeViewItemが存在することを意味します。提案していただきありがとうございます。 – Carlo