Mega Code Archive

 
Categories / C# / WPF
 

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

<Window xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'         xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>     <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='src' Source="{Binding Source={StaticResource MyData}, XPath=Item}">             <CollectionViewSource.GroupDescriptions>                 <PropertyGroupDescription PropertyName="@Catalog" />             </CollectionViewSource.GroupDescriptions>         </CollectionViewSource>     </Window.Resources>     <ListView ItemsSource='{Binding Source={StaticResource src}}' 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>