У меня есть древовидная структура, отображающая структуру папок (под папками и файлами).
Я хочу добавить кнопку, позволяющую сортировать содержимое (файлы) по алфавиту.
Вот моя реализация:
XAML
<TreeView Name="WorkspaceTree" Grid.Row="1" FontSize="13" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinWidth="200" IsTextSearchEnabled="True" SelectedItemChanged="ProjectWorkspace_SelectedItemChanged" MouseRightButtonDown="ProjectWorkspace_MouseRightButtonDown" MouseDoubleClick="ProjectWorkspace_MouseDoubleClick">
<TreeView.Resources>
<ContextMenu x:Key ="FolderContext" StaysOpen="true">
<MenuItem x:Name="ProjectWorkspace_OpenAll" Header="Open All" Click="ProjectWorkspace_OpenAll_Click"/>
</ContextMenu>
<ContextMenu x:Key="ReaderContext" StaysOpen="true">
<MenuItem x:Name="ProjectWorkspace_Open" Header="Open" Click="ProjectWorkspace_Open_Click"/>
<MenuItem x:Name="ProjectWorkspace_Build" Header="Build" Click="ProjectWorkspace_Build_Click"/>
</ContextMenu>
</TreeView.Resources>
No workspace was loaded...
</TreeView>
Дерево заполнено кодом. Вот снимок.
...
WorkspaceTree.Items.Clear();
var rootDirectoryInfo = new DirectoryInfo(dlg.FileName);
TreeViewItem root_item = CreateDirectoryNode(rootDirectoryInfo);
if (root_item != null)
{
WorkspaceTree.Items.Add(root_item);
...
}
private static TreeViewItem CreateDirectoryNode(DirectoryInfo directoryInfo)
{
var directoryNode = new TreeViewItem { Header = directoryInfo.Name, Tag = "Folder" };
foreach (var directory in directoryInfo.GetDirectories())
{
TreeViewItem dir_recursive_item = CreateDirectoryNode(directory);
if (dir_recursive_item != null)
directoryNode.Items.Add(dir_recursive_item);
}
foreach (var file in directoryInfo.GetFiles("*.txt"))
directoryNode.Items.Add(new TreeViewItem { Header = file.Name, Tag = file.FullName });
if (directoryNode.Items.Count == 0)
return null;
return directoryNode;
}
}
Теперь после того, как дерево показано, посредством взаимодействия пользовательского интерфейса его содержимое должно быть отсортировано.
Я поместил кнопку, событие клика которой:
private void Sort_Click(object sender, RoutedEventArgs e)
{
WorkspaceTree.Items.SortDescriptions.Clear();
WorkspaceTree.Items.SortDescriptions.Add(new SortDescription("Header", ListSortDirection.Ascending));
}
Пока событие запущено - на самом Дереве ничего не происходит.
Событие I попыталось отсортировать по Header.Name
в SortDescription
, без изменений в поведении.
Что мне не хватает?