在xaml中对TreeView进行分组和排序

时间:2010-01-24 15:36:08

标签: wpf xml xaml sorting

我在使用xaml进行分组和排序时遇到了问题,希望有人能让我理顺!

我已经从一个文件和文件夹树(就像Windows资源管理器)创建了一个xml文件,它可以是多个级别的深度。我已将TreeView控件绑定到xml数据源,它工作得很好!它按字母顺序对所有内容进行排序,但是...我希望它首先对所有文件夹进行排序,然后对所有文件进行排序,而不是像文件一样对文件进行排序。

xml:                                 

如果将其加载到treeviw,它将在文件夹之前显示两个文件,因为它们首先是按字母顺序排列的。

这是我的代码:

  <!-- This will contain the XML-data. -->
  <XmlDataProvider x:Key="xmlDP" XPath="*">
     <x:XData>
        <Select_Project />
     </x:XData>
  </XmlDataProvider>

  <!-- This HierarchicalDataTemplate will visualize all XML-nodes -->
  <HierarchicalDataTemplate DataType="project" ItemsSource ="{Binding}">
     <TextBlock Text="{Binding XPath=@name}" />
  </HierarchicalDataTemplate>

  <HierarchicalDataTemplate DataType="folder" ItemsSource ="{Binding}">
     <TextBlock Text="{Binding XPath=@name}" />
  </HierarchicalDataTemplate>

  <HierarchicalDataTemplate DataType="file" ItemsSource ="{Binding}">
     <TextBlock Text="{Binding XPath=@name}" />
  </HierarchicalDataTemplate>

  <CollectionViewSource x:Key="projectView" Source="{StaticResource xmlDP}">
     <CollectionViewSource.SortDescriptions>
        <!-- ADD SORT DESCRIPTION HERE -->
     </CollectionViewSource.SortDescriptions>
  </CollectionViewSource>

  <TreeView Margin="11,79.992,18,19.089" 
            Name="tvProject" 
            BorderThickness="1" FontSize="12" FontFamily="Verdana">

     <TreeViewItem ItemsSource="{Binding Source={StaticResource xmlDP}, XPath=*}"  
                   Header="Project"/>
  </TreeView>

1 个答案:

答案 0 :(得分:0)

尝试在XML文件中添加另一个属性,我将其称为FileType,但您可以随意调用它。对于此元素,请将其指定为“Folder”或“File”。现在你必须做到排序水平。首先对FileType进行降序(首先是文件夹,然后是文件的第二个),然后对Name属性进行排序。换句话说,XML就像这样:

<project name="ProjectName" >
    <file name="alphacat.html" FileType="File" />
    <file name="aztec.html" FileType="File" />
    <folder name="FolderA" FileType="Folder" >
        <file name="application.asp" FileType="File" />
        <file name="work.asp" FileType="File" /> 
    </folder> 
</project>

这有帮助吗?