Поделиться через


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

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

Пример

В следующем примере статический ресурс с именем помещает определяется как коллекция объектов Place, в которых каждый объект Place состоит из имени города и состояния. Префикс src сопоставляется с пространством имен, где определён источник данных Места. Префикс 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>

См. также