Виртуализация TreeView

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

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

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

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

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

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

Спасибо.

Ответы

Ответ 1

Мы использовали Bea Costa​​strike > Stollnitz трюк отступов в ListView и с помощью виртуализации пользовательского интерфейса. Хороший эффект.

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

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

Ответ 2

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

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

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

Нужен образец для поиска WPF TreeView с виртуализацией и загрузкой по запросу

.

Некоторые примеры для реализации Load on спрос -

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