首页 > 解决方案 > 如何在对标题应用排序后刷新 WPF Treeview 内容?

问题描述

我有一个显示文件夹结构(下的文件夹和文件)的树视图。

我想添加一个按钮以允许按字母顺序对内容(文件)进行排序。

这是我的实现:

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;
     }
}

现在显示树后,通过 UI 交互,应该对其内容进行排序。我放置了一个按钮,其点击事件是:

private void Sort_Click(object sender, RoutedEventArgs e)
{
    WorkspaceTree.Items.SortDescriptions.Clear();
    WorkspaceTree.Items.SortDescriptions.Add(new SortDescription("Header", ListSortDirection.Ascending));
}

事件运行时 - 树本身没有任何反应。

我尝试在 中进行排序Header.Name,但SortDescription行为没有改变。

我错过了什么?

标签: c#wpftreeviewtreeviewitem

解决方案


推荐阅读