Виртуализация TreeView
мы пытаемся создать хороший способ для виртуализации TreeView
, данные на самом деле не являются проблемой, потому что они очень легкие (около 16 байт на элемент), проблема в том, что мы можем потенциально иметь десятки тысячи, и хотя фактические данные будут занимать всего 160 килобайт памяти, элементы treeview будут использовать намного больше памяти. Мы пробовали виртуализацию с тремя разными деревьями, WPF, Infragistics и Telerik. Все они имеют большие проблемы, которые делают их непригодными для нашего приложения:
WPF TreeView
: Полоса прокрутки показывает какое-то странное поведение, много прыгает, изменяет размер непоследовательно, прокрутка, перетаскивая его мышью, не работает должным образом (прыгает назад и вперед)
Telerik: элементы исчезают, полоса прокрутки тоже неустойчива, элементы случайным образом расширяются, стили не работают
Инфраструктура: элементы не виртуализированы вообще, каждый элемент остается в памяти, что делает виртуализацию бесполезной.
Мы боролись с этим через пару месяцев, и мы не смогли найти хорошее решение. Кто-нибудь из вас успешно реализовал виртуализацию в TreeView
с более чем 9000 элементами? Если да, какова была ваша стратегия? Вы использовали сторонние элементы управления? Работало ли оно на 100%?
Любое предложение чрезвычайно ценится.
Спасибо.
Ответы
Ответ 1
Мы использовали Bea Costastrike > 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