Wpf TreeView со столбцами, с виртуализацией пользовательского интерфейса и виртуализацией данных

Я ищу элемент управления wpf (бесплатный или коммерческий). Дерево должно поддерживать все обычные характеристики древовидного представления (стили, шаблоны данных, шаблон управления и т. Д.) И поддерживать размещение с помощью столбцов (что-то вроде окна Watch в Visual Studio).

Но также:

  1. Хорошая виртуализация - должна поддерживать тысячи элементов
  2. Встроенная виртуализация данных - загрузка и обработка данных происходит медленно и не может быть выполнена сразу и в определенном порядке (что-то вроде разбивки на страницы).
  3. Поддержка модели представления и привязка, я предпочитаю исследовать дерево, используя своего рода модель представления, а не исследовать само дерево
  4. Встроенная поддержка поиска и фильтрации по представлению данных с последующим отображением совпадений в визуальных элементах дерева.
  5. Точная и быстрая прокрутка и возможность перехода к определенному элементу (я предпочитаю использовать представление элемента в ViewModel).

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


person Eli Dagan    schedule 28.03.2016    source источник


Ответы (2)


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

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

Производительность элемента управления Telerik RadTreeView при работе с огромным количеством элементов значительно оптимизируется за счет функции загрузки по запросу. Этот механизм позволяет узлам загружать свои дочерние узлы, когда пользователь разворачивает родительский, щелкнув значок «+».

RadTreeView - это управляемый данными элемент управления, предназначенный для отображения больших объемов иерархических данных, и он не предоставляет встроенных функций поиска, фильтрации и сортировки. Следовательно, такие операции должны выполняться с данными, которые он представляет. Пример

person Noam M    schedule 13.04.2016
comment
спасибо за ответ надеюсь найти элемент управления со встроенной поддержкой виртуализации данных. (Я хочу иметь какое-то поведение подкачки) что-то вроде: devzest. com / blog / post / WPF-Data-Virtualization.aspx, но в виде дерева - person Eli Dagan; 14.04.2016

Лучший пример, который я когда-либо видел, - это TreeView Джоша Смита. Он использует загрузку по требованию и имеет текстовый поиск.

Чтобы включить DataVirtualization, вы должны использовать:

<TreeView
    VirtualizingStackPanel.IsVirtualizing = "True"
    VirtualizingStackPanel.VirtualizationMode = "Recycling" />

Но будьте осторожны, Virtualization работает только тогда, когда TreeView использует Binding, а не когда узлы генерируются один за другим в коде, как в следующем примере:

TreeViewItem rootItem = new TreeViewItem() { Header = "Item Level 0" };

for (int i = 0; i < 1000; i++)
{
    TreeViewItem itemLevel1 = new TreeViewItem() { Header = "Item Level 1" };
    itemLevel1.Items.Add(new TreeViewItem());
    rootItem.Items.Add(itemLevel1);
}

Обновление:

Вы можете использовать элемент управления DevExpress TreeList. Это бесплатная пробная версия.

Или элемент управления TreeView от Telerik. Это 30-дневная бесплатная пробная версия. Посмотрите их демоверсии, и вы даже можете скачать и попробовать их.

Обновление1:

Если у вас есть сомнения по поводу производительности, TreeView Джоша Смита, то могу сказать о своем опыте:

  • У меня 500 узлов, и время загрузки этих элементов составляет 0,0003982 секунды.
  • Я могу прокручивать вверх и вниз, и пользовательский интерфейс не зависает (идеальная виртуализация данных)
  • Вложенные узлы открываются идеально, поскольку Джош Смит использует отложенную загрузку
  • Все узлы могут иметь шаблоны. Таким образом, вы можете установить любое изображение или дизайн, который хотите
  • Этот TreeView не нарушает абсолютно правила MVVM, потому что он использует viewModels для TreeViewItems. Это означает, что вы не встретите странных ошибок или исключений, если у вас будет TreeViewITem в вашем viewModel. Например, эта ошибка < / а>.

В заключение я хотел бы сказать, что я действительно рад, что выбрал TreeView by JoshSmith в своем рабочем приложении, потому что его действительно просто поддерживать и редактировать. У него действительно отличная производительность.

Фотография моего TreeView:

введите описание изображения здесь

person StepUp    schedule 28.03.2016
comment
@EliDagan, ты прав. Пожалуйста, прочтите внимательно мой ответ. Я написал: не тогда, когда узлы генерируются один за другим в коде, как в следующем примере - person StepUp; 28.03.2016
comment
спасибо, но мне нужна виртуализация всего дерева, а не только для каждого уровня элемента (например, реализация TreeView). И мне также нужна виртуализация данных (если возможно, встроенная поддержка), потому что мне нужно каждый раз загружать разные фрагменты дерева. - person Eli Dagan; 28.03.2016
comment
@EliDagan Эти VirtualizingStackPanel.IsVirtualizing = True VirtualizingStackPanel.VirtualizationMode = Повторное использование строк предназначено для DataVirtualization для всего дерева, поэтому каждый уровень элемента включен :). Вдобавок в TreeView от Джоша Смита есть TextSearch. Это все, что вы хотите. - person StepUp; 28.03.2016
comment
@EliDagan не стесняйтесь задавать любой вопрос. Если вы чувствуете, что мой ответ вам помогает, то вы можете отметить мой ответ как ответ, чтобы упростить дальнейшие поиски других людей. Пожалуйста, прочтите этот meta.stackexchange. ru / questions / 5234 / - person StepUp; 28.03.2016
comment
как я сказал ранее. TreeView из фреймворка не является необязательным, потому что он имеет очень низкую производительность при использовании его с большим набором иерархических данных, каждый из которых имеет множество дочерних узлов. (глубокое и широкое дерево) Также мне нужна виртуализация данных, которая позволит мне загружать различные части данных и отслеживать имеющиеся и отсутствующие данные. Я знаю, что могу построить сам, но мне нужно уже существующее решение. - person Eli Dagan; 29.03.2016
comment
Привет, я ищу того, кто уже пробует бесплатную или коммерческую реализацию и может поделиться - person Eli Dagan; 29.03.2016