Практическое руководство. Сортировка и группировка данных с помощью представления в XAML

В этом примере показано, как можно создать представление коллекции данных на языке XAML. Представления позволяют реализовать функции группировки, сортировки, фильтрации и понятия текущего элемента.

Пример

В следующем примере статический ресурс с именем places определяется как коллекция объектов Place, в которой каждый объект Place состоит из названия города и штата. Префикс src сопоставлен пространству имен, в котором определен источник данных Places. Префикс scm сопоставлен с "clr-namespace:System.ComponentModel;assembly=WindowsBase", а dat сопоставлен с "clr-namespace:System.Windows.Data;assembly=PresentationFramework".

В следующем примере создается представление коллекции данных с отсортировкой по названию города и с группированием по штатам.

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

После этого представление может использоваться в качестве источника привязки, как показано в следующем примере:

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

Для привязок к XML-данным, определенным в ресурсе XmlDataProvider, имена в 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>

См. также