Группировка и сортировка для TreeView в xaml - PullRequest
0 голосов
/ 24 января 2010

У меня проблемы с группировкой и сортировкой в ​​xaml, и я надеюсь, что кто-нибудь может выправить меня!

Я создал xml-файл из дерева файлов и папок (подобно проводнику Windows), который может иметь несколько уровней. Я связал элемент управления TreeView с источником данных xml, и он прекрасно работает! Он сортирует все по алфавиту, но ... Я бы хотел, чтобы сначала отсортировались все папки, а затем все файлы, а не папки, перечисленные с файлами, как сейчас.

xml:

если вы загрузите его в дерево, то оно отобразит два файла перед папкой, потому что они сначала в альфа-порядке.

вот мой код:

  <!-- 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 голосов
/ 24 января 2010

Попробуйте добавить другой атрибут в ваш XML-файл, я назову его FileType, но вы можете называть его как угодно. Для этого элемента укажите, что он равен «Папка» или «Файл». Теперь вы должны сделать уровни сортировки. Сначала сортируйте по убыванию FileType (сначала папки, затем файлы), затем сортируйте по атрибуту имени. Другими словами, вам 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>

Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...