如何:在 XAML 中使用视图对数据进行排序和分组

此示例演示如何在可扩展应用程序标记语言(XAML)中创建数据收集的视图。 视图可以实现分组、排序、筛选以及当前项的概念功能。

示例:

在以下示例中,命名 位置 的静态资源定义为 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>

对于绑定到资源中 XmlDataProvider 定义的 XML 数据,请在 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>

另请参阅