2010-01-24 4 views
0

Je n'arrive pas à me concentrer sur le regroupement et le tri en xaml et j'espère que quelqu'un pourra me remettre en ordre!Regroupement et tri pour TreeView en xaml

J'ai créé un fichier xml à partir d'une arborescence de fichiers et de dossiers (tout comme Windows Explorer) qui peut avoir plusieurs niveaux de profondeur. J'ai lié un contrôle TreeView à une source de données XML et cela fonctionne très bien! Il trie tout par ordre alphabétique, mais ... Je voudrais qu'il trier tous les dossiers d'abord, puis tous les fichiers, plutôt que des dossiers répertoriés avec des fichiers, comme il le fait maintenant.

xml:

si vous chargez à un treeviw il affichera les deux fichiers avant le dossier parce qu'ils sont d'abord en alpha ordre.

voici mon code:

<!-- 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

désolé, oublié d'inclure le xml: xml: < nom de dossier = "FolderA"> danhotb

Répondre

0

Essayez d'ajouter un autre attribut à votre fichier XML, je vais l'appeler FileType, mais vous pouvez l'appeler comme quel que soit votre. Pour cet élément, spécifiez qu'il soit égal à "Dossier" ou "Fichier". Maintenant, vous devez faire des niveaux de tri. Premier tri Decending sur FileType (Dossiers d'abord, Files second), puis trier sur l'attribut Name. En d'autres termes, vous XML aimerait comme ceci:

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

Est-ce que l'aide?

+0

Merci pour la réponse. Je comprends ce que les critères de tri devraient être mais je ne sais pas comment créer les sortes dans le xaml. Je vais ajouter l'attribut comme vous l'avez suggéré (j'espérais trier le nom de l'élément, mais je n'en ai pas vraiment besoin). Pouvez-vous me montrer comment coder le xaml? – danhotb

+0

Hmm ... c'est étrange. Cela fonctionne correctement lorsque j'utilise un ListView lié à un CollectionViewSource avec SortDescriptors, mais un TreeView ne semble pas ramasser le tri. Désolé pour ça. Une solution de contournement serait d'ordonner votre XML comme vous le voulez afficher - Dossiers en premier, fichiers en second. Ce n'est pas idéal, mais ça marcherait. Je peux supprimer ma réponse si vous pensez que vous pourriez vous aider à obtenir plus de réponses des autres. Faites le moi savoir. – Brent

Questions connexes