2011-01-05 3 views
13

Мы пытаемся придумать хороший способ виртуализации TreeView, данные на самом деле не проблема, потому что это очень легкий (около 16 байт на элемент), проблема в том, что мы могли бы иметь десятки тысячи, и хотя фактические данные будут занимать всего 160 килобайт памяти, элементы treeview будут использовать намного больше памяти. Мы пробовали виртуализацию с тремя разными деревьями, WPF, Infragistics и Telerik. Все они имеют большие проблемы, которые делают их непригодными для использования для нашего приложения:Виртуализация TreeView

WPF TreeView: Полоса прокрутки показывает некоторое странное поведение, прыгает вокруг много, изменения размера непоследовательны, прокрутка, перетаскивая его с помощью мыши не работать должным образом (прыжки вперед и назад)

Telerik: детали исчезают, полоса прокрутки, ошибочна тоже элементы случайным образом расширять коллапс, стили не работают

Infragistics: детали не виртуализировать на всех, каждый элемент остается в что делает виртуализацию памяти бесполезной.

Мы боролись с этим через пару месяцев, и мы не смогли найти хорошее решение. Кто-нибудь из вас успешно реализовал виртуализацию в TreeView с более чем 9000 позиций? Если да, какова была ваша стратегия? Вы использовали сторонние элементы управления? Он работал на 100%?

Любое предложение чрезвычайно ценится.

Спасибо.

+1

+1 У меня такая же проблема с WPF виртуализированных Treeview, попробовал все и при прокрутке поведение по-прежнему неустойчиво. – BrokenGlass

+0

@BrokenGlass Спасибо за поддержку вопроса. Надеюсь, мы получим хорошее решение для этого. – Carlo

+0

также см. Мой родственный вопрос здесь (очевидно, без ответа): http://stackoverflow.com/questions/4074475/scrolling-bug-in-wpf-virtualized-treeview – BrokenGlass

ответ

5

Мы использовали Беа трюк Косты Stollnitz по отступов в a ListView и использование виртуализации пользовательского интерфейса с хорошим эффектом.

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

Я получил 100000 элементов в поддержке ICollectionView, и он по-прежнему довольно отзывчивым фильтрации и т.д.

+0

Печально, что это не работает из-за виртуализации Treeviews, вместо этого приходится использовать эти трюки – BrokenGlass

+0

Но она упоминает, что это решение было связано с тем, что TreeView не имел виртуализации до 3.5, поэтому мне интересно, действительно решает проблему. Я сразу же дам это, спасибо за предложение. – Carlo

+0

Я использовал виртуализацию пользовательского интерфейса с TreeView под управлением v4.0, и он все еще не очень хорошо работал. Оказалось, что причиной было просто разбить виртуализацию с помощью TreeView. ListView позволяет обойти эти ограничения. – codekaizen

2

Мы также находимся в аналогичной ситуации, мы пробовали использовать дерево-представление Syncfusion, и это было жалко. Поскольку у нас не было выбора какого-либо другого 3-го партийного контроля, и лучшего решения не было, мы, наконец, установили вместе с Virtualization и Load on demand (Lazy loading).

Как и в нашем случае, обычно все узлы не будут расширяться в любой момент времени. Это в некоторой степени решает проблемы прокрутки и делает приложение применимым в большинстве сценариев. Хотя у нас все еще есть наши фигуры, и они продолжают искать лучшее решение.

Я хотел бы упомянуть здесь, что используя как виртуализация и нагрузки на спроса (отложенной загрузки) вместе имеют свои собственные побочные эффекты -

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

.

Некоторые образцы для реализации нагрузки на спроса -

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 и TreeViews от Telerik), поэтому нам также пришлось уклониться от этой опции. Мы потенциально могли бы расширить тысячи элементов, что означает тысячи TreeViewItems в памяти. Спасибо за предложение. – Carlo

Смежные вопросы