2010-01-24 97 views
0

我在xaml中進行分組和排序時遇到了問題,希望有人能讓我理順!在xaml中對TreeView進行分組和排序

我已經創建了一個文件和文件夾樹(就像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 [email protected]}" /> 
    </HierarchicalDataTemplate> 

    <HierarchicalDataTemplate DataType="folder" ItemsSource ="{Binding}"> 
    <TextBlock Text="{Binding [email protected]}" /> 
    </HierarchicalDataTemplate> 

    <HierarchicalDataTemplate DataType="file" ItemsSource ="{Binding}"> 
    <TextBlock Text="{Binding [email protected]}" /> 
    </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

抱歉,忘了包括XML: 在xml: <項目名稱= 「項目名」> <文件名= 「alphacat.html」/> <文件名= 「aztec.html」/> <文件夾名稱= 「FolderA」> <文件名= 「application.asp」/> <文件名= 「work.asp」/> – danhotb

回答

0

嘗試增加其他屬性的XML文件,我會打電話給它的文件類型,但是你可以把它無論你喜歡。爲此元素指定它等於「文件夾」或「文件」。現在你必須做的排序水平。首先將文件類型減小(文件夾第一,文件第二),然後對名稱屬性進行排序。換句話說,你的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> 

這有幫助嗎?

+0

感謝您的答覆。我明白排序標準應該是什麼,但我不知道如何在xaml中創建排序。我會添加像你所建議的屬性(我希望排序的元素名稱,但並不真的需要)。你能告訴我如何編碼xaml嗎? – danhotb

+0

嗯......這很奇怪。當我用SortDescriptors綁定到一個CollectionViewSource上的ListView時,它工作正常,但是TreeView似乎沒有采用這種類型。對於那個很抱歉。一種解決方法是按照您希望的方式顯示您的XML - 文件夾第一,文件第二。這並不理想,但它會起作用。如果您認爲可以幫助您從別人那裏獲得更多答案,我可以刪除我的答案。讓我知道。 – Brent