Comment : trier et grouper des données à l'aide d'une vue en XAML

Cet exemple montre comment créer une vue d’une collection de données dans XAML (Extensible Application Markup Language). Les vues permettent les fonctionnalités de regroupement, de tri, de filtrage et de notion d’élément actuel.

Exemple

Dans l’exemple suivant, la ressource statique nommée places est définie comme une collection d’objets Place , dans laquelle chaque objet Place est constitué d’un nom de ville et de l’état. Le préfixe src est mappé à l’espace de noms où les emplacements de la source de données sont définis. Le préfixe scm est mappé à et à "clr-namespace:System.ComponentModel;assembly=WindowsBase" dat mappé à "clr-namespace:System.Windows.Data;assembly=PresentationFramework".

L’exemple suivant crée une vue de la collection de données triée par le nom de la ville et regroupée par état.

<Window.Resources>

  <src:Places x:Key="places"/>

  <CollectionViewSource Source="{StaticResource places}" x:Key="cvs">
    <CollectionViewSource.SortDescriptions>
      <scm:SortDescription PropertyName="CityName"/>
    </CollectionViewSource.SortDescriptions>
    <CollectionViewSource.GroupDescriptions>
      <dat:PropertyGroupDescription PropertyName="State"/>
    </CollectionViewSource.GroupDescriptions>
  </CollectionViewSource>

La vue peut ensuite être une source de liaison, comme dans l’exemple suivant :

<ListBox ItemsSource="{Binding Source={StaticResource cvs}}"
         DisplayMemberPath="CityName" Name="lb">
  <ListBox.GroupStyle>
    <x:Static Member="GroupStyle.Default"/>
  </ListBox.GroupStyle>
</ListBox>

Pour les liaisons aux données XML définies dans une XmlDataProvider ressource, précèdez le nom XML par un symbole @.

<XmlDataProvider x:Key="myTasks" XPath="Tasks/Task">
    <x:XData>
        <Tasks xmlns="">
            <Task Name="Groceries" Priority="2" Type="Home">
<CollectionViewSource x:Key="mySortedTasks"
                      Source="{StaticResource myTasks}">
    <CollectionViewSource.SortDescriptions>
        <scm:SortDescription PropertyName="@Priority" />
    </CollectionViewSource.SortDescriptions>
    <CollectionViewSource.GroupDescriptions>
        <dat:PropertyGroupDescription PropertyName="@Priority" />
    </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

Voir aussi