Cómo: Ordenar y agrupar datos mediante una vista en XAML

En este ejemplo se muestra cómo crear una vista de una colección de datos en lenguaje XAML. Las vistas permiten las funcionalidades de agrupación, ordenación, filtrado, así como la noción de un elemento actual.

Ejemplo

En el ejemplo siguiente, el recurso estático denominado places se define como una colección de objetos Place, en la que cada objeto Place se compone de un nombre de ciudad y el estado. El prefijo src se asigna al espacio de nombres donde se define el origen de datos Places. El prefijo scm se asigna a "clr-namespace:System.ComponentModel;assembly=WindowsBase" y dat se asigna a "clr-namespace:System.Windows.Data;assembly=PresentationFramework".

En el ejemplo siguiente se crea una vista de la colección de datos ordenada por el nombre de la ciudad y agrupada por el estado.

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

Después, la vista puede ser un origen de enlace, como en el ejemplo siguiente:

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

Para los enlaces a datos XML definidos en un recurso XmlDataProvider, anteponga un símbolo @ al nombre XML.

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

Vea también