我在使用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>
答案 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>
这有帮助吗?