Быстро разверните TreeViewItems в wpf - PullRequest
0 голосов
/ 06 июля 2011

Я знаю, как развернуть все узлы в виде дерева:

<TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Setter Property="TreeViewItem.IsExpanded" Value="True"/>
            </Style>
 </TreeView.ItemContainerStyle>

Единственная проблема в том, что для расширения всех узлов требуется около минуты ... это, вероятно, потому, что существует так много элементов. Как я мог ускорить этот процесс?


Edit:

Итак, у меня есть список: List<ScanItems> MyFilesList

ScanItem - это класс, который имеет такие свойства, как: FullName, Name, Size, DateCreated, ComparePath и другие конкретные свойства, которые мне нужны, поэтому я не использовал класс FileInfo.

ScanFile - это класс, который наследуется от ScanItems, поэтому он похож на него с добавлением других пользовательских свойств.

ScanDir - это еще один класс, который наследуется также от ScanItem и имеет следующее свойство:

public List<ScanItem> items{get;set;}  

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

Посмотрите на этот вопрос относительно того, как заполнить древовидную структуру из списка файлов.

так что теперь я надеюсь, что я правильно объясню, как привязать этот список к древовидной структуре.

Теперь позвольте мне объяснить, как я добавил файлы в MyFilesList. Я создал метод рекурсии для поиска файлов в каталоге. Если в текущем каталоге содержится файл, добавьте элемент ScanFile. Если он содержит папку, добавьте объект ScanDir и снова вызовите тот же метод, передав список ScanDir. Таким образом, этот процесс занимает около 8 секунд для сканирования моего внешнего жесткого диска. после того, как этот метод будет выполнен, мой список может содержать только 4 элемента, но один из этих элементов будет содержать список из 20 элементов и т. д. Точно так же, как папка может иметь 5 элементов, и если один из этих 5 элементов окажется папкой в ​​этой папке может иметь дополнительные предметы.

Поэтому, когда я выполняю TreeView.DataContext = MyFilesList, древовидная структура заполняется менее чем за секунду. Но когда я включаю:

<TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Setter Property="TreeViewItem.IsExpanded" Value="True"/>
            </Style>
 </TreeView.ItemContainerStyle>

этот стиль в древовидном представлении древовидная требует много времени для загрузки.

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Посмотрите на сообщения, сделанные Bea Stollnitz о просмотрах дерева и производительности.
Соответствующее сообщение будет:

Она хорошо объясняет все варианты, которые вы можете попробоватьиз.Слишком много контента, чтобы поместить все это сюда.

2 голосов
/ 08 июля 2011

Вы пробовали циклически проходить по элементам дерева и расширять их "вручную", устанавливая

IsExpanded = true;

Если это не сработает, попробуйте обойти и добавить к своему ScanDir (я полагаю, что этоединственный класс, который вы раскрываете?) свойство IsExpanded (или подобное) и привязка к нему в вашем шаблоне.Не лучшие решения практиковать мудро, но если это сработает ...

...