Create a ListView control that implements a GridView view mode, displays content in groups.

image_pdfimage_print


   
   

<Window xmlns=&#039;http://schemas.microsoft.com/winfx/2006/xaml/presentation&#039;
        xmlns:x=&#039;http://schemas.microsoft.com/winfx/2006/xaml&#039;>
    <Window.Resources>
        <XmlDataProvider x:Key="MyData" XPath="/Info">
            <x:XData>
                <Info xmlns="">
                    <Item ID="1" Name="Book 1" Price="$2.05" Author="Author A" Catalog="Business"/>
                    <Item ID="2" Name="Book 2" Price="$0.00" Author="Author B" Catalog="Language"/>
                    <Item ID="3" Name="Book 3" Price="$19.00" Author="Author C" Catalog="Language"/>
                    <Item ID="4" Name="Book 4" Price="$81.50" Author="Author D" Catalog="Business"/>
                    <Item ID="5" Name="Book 5" Price="$9.00" Author="Author E" Catalog="Health"/>
                    <Item ID="6" Name="Book 6" Price="$18.50" Author="Author F" Catalog="Language"/>
                </Info>
            </x:XData>
        </XmlDataProvider>
        <CollectionViewSource x:Key=&#039;src&#039; Source="{Binding Source={StaticResource MyData}, XPath=Item}">
            <CollectionViewSource.GroupDescriptions>
                <PropertyGroupDescription PropertyName="@Catalog" />
            </CollectionViewSource.GroupDescriptions>
        </CollectionViewSource>
    </Window.Resources>

    <ListView ItemsSource=&#039;{Binding Source={StaticResource src}}&#039; BorderThickness="0">
        <ListView.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Margin" Value="0,0,0,5"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <Expander IsExpanded="True" BorderBrush="#FFA4B97F" 
                            BorderThickness="0,0,0,1">
                                        <Expander.Header>
                                            <DockPanel>
                                                <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" 
                                   Margin="5,0,0,0" Width="100"/>
                                                <TextBlock FontWeight="Bold" 
                                   Text="{Binding Path=ItemCount}"/>
                                            </DockPanel>
                                        </Expander.Header>
                                        <Expander.Content>
                                            <ItemsPresenter />
                                        </Expander.Content>
                                    </Expander>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
        </ListView.GroupStyle>
        <ListView.View>
            <GridView>
                <GridViewColumn Header="ID" 
                        DisplayMemberBinding="{Binding XPath=@ID}" 
                        Width="200" />
                <GridViewColumn Header="Name" 
                        DisplayMemberBinding="{Binding XPath=@Name}" 
                        Width="240" />
                <GridViewColumn Header="Price" 
                        DisplayMemberBinding="{Binding XPath=@Price}"
                        Width="180" />
                <GridViewColumn Header="Author" 
                        DisplayMemberBinding="{Binding XPath=@Author}" 
                        Width="180" />
            </GridView>
        </ListView.View>
    </ListView>


</Window>