Windows8 创建分组GridView

简介:

1. One Level

   1:  public enum Position { C, PF, SF, SG, PG };
   2:   
   3:  public class Player
   4:      {
   5:          public string Name { get; set; }
   6:          public int Number { get; set; }
   7:          public Position PositionInTeam { get; set; }
   8:          public ImageSource Image { get; set; }
   9:          public Team TeamIn { get; set; }
  10:   
  11:          public void SetImage(Uri baseUri, String path)
  12:          {
  13:              Image = new BitmapImage(new Uri(baseUri, path));
  14:          }
  15:      }

按PositionInTeam分组显示Player:

Untitled

 

2. Two Levels

   1:   public class Team
   2:      {
   3:          public Team()
   4:          {
   5:              PlayerList = new List<Player>();
   6:          }
   7:          public string Name { get; set; }
   8:          public List<Player> PlayerList { get; set; }
   9:      }

按Team分组显示Player信息:

Untitled2

 

 

核心类:

CollectionViewSource Class

GroupStyle Class

 

 

关键点:

1. One Level

设置CollectionViewSource的IsSourceGrouped属性为true

用Linq查询为集合分组

   1:  public IOrderedEnumerable<IGrouping<Position, Player>> GetGroupedPlayerData()
   2:          {
   3:              IOrderedEnumerable<IGrouping<Position,Player>> groupedData = from p in Players group p by p.PositionInTeam into grp orderby grp.Key select grp;
   4:              return groupedData;
   5:          }

 

2. Two Levels

设置CollectionViewSource的IsSourceGrouped属性为true

设置CollectionViewSource的ItemsPath属性为子集合

   1:  <Page.Resources>
   2:      <CollectionViewSource x:Name="cvsTeams" IsSourceGrouped="True" ItemsPath="PlayerList"/>
   3:      <CollectionViewSource x:Name="cvsPlayers"/>
   4:  </Page.Resources>

 

 

代码:

One Level:

   1:  <GridView ItemsSource="{Binding Source={StaticResource cvsPlayers}}"
   2:            Margin="120" MaxHeight="500">
   3:              
   4:              <!--Item的模板-->
   5:              <GridView.ItemTemplate>
   6:                  <DataTemplate>
   7:                      <StackPanel Margin="10,10,0,0" Orientation="Horizontal" HorizontalAlignment="Left" Width="300">
   8:                          <Image Source="{Binding Image}" Height="80" Width="100" VerticalAlignment="Center" Margin="0,0,10,0" HorizontalAlignment="Left"/>
   9:                          <StackPanel Orientation="Vertical" Margin="0" HorizontalAlignment="Left">
  10:                              <TextBlock Text="{Binding Name}" FontWeight="Bold" Style="{StaticResource ItemTextStyle}"/>
  11:                              <TextBlock Text="{Binding Number}"  Style="{StaticResource ItemTextStyle}"/>
  12:                          </StackPanel>
  13:                      </StackPanel>
  14:                  </DataTemplate>
  15:              </GridView.ItemTemplate>
  16:              
  17:              <!--所有的Group在GridView中的排列方式-->
  18:              <GridView.ItemsPanel>
  19:                  <ItemsPanelTemplate>
  20:                      <StackPanel Orientation="Horizontal"/>
  21:                  </ItemsPanelTemplate>
  22:              </GridView.ItemsPanel>
  23:              
  24:              <GridView.GroupStyle>
  25:                  <GroupStyle HidesIfEmpty="True">
  26:                      
  27:                      <!--Group标题的模板-->
  28:                      <GroupStyle.HeaderTemplate>
  29:                          <DataTemplate>
  30:                              <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" Margin="0">
  31:                                  <TextBlock Text="{Binding Key}" Foreground="Gray" FontSize="25" Margin="5"></TextBlock>
  32:                              </Grid>
  33:                          </DataTemplate>
  34:                      </GroupStyle.HeaderTemplate>
  35:                      
  36:                      <!--GroupItem样式-->
  37:                      <GroupStyle.ContainerStyle>
  38:                          <Style TargetType="GroupItem">
  39:                              <Setter Property="FontFamily" Value="Segoe UI" />
  40:                              <Setter Property="Padding" Value="0" />
  41:                              <Setter Property="Margin" Value="0,0,0,0" />
  42:                              <Setter Property="HorizontalContentAlignment" Value="Left" />
  43:                              <Setter Property="VerticalContentAlignment" Value="Top" />
  44:                              <Setter Property="BorderThickness" Value="0"/>
  45:                              <Setter Property="TabNavigation" Value="Local" />
  46:                          </Style>
  47:                      </GroupStyle.ContainerStyle>
  48:                      
  49:                      <!--Item在Group中的排列方式-->
  50:                      <GroupStyle.Panel>
  51:                          <ItemsPanelTemplate>
  52:                              <VariableSizedWrapGrid/>
  53:                          </ItemsPanelTemplate>
  54:                      </GroupStyle.Panel>
  55:                  </GroupStyle>
  56:              </GridView.GroupStyle>
  57:          </GridView>

Code Behind

   1:  protected override void OnNavigatedTo(NavigationEventArgs e)
   2:          {
   3:              cvsPlayers.Source = new SampleDataSource().GetGroupedPlayerData();
   4:          }

 

Two Levels:

   1:  <GridView ItemsSource="{Binding Source={StaticResource cvsTeams}}"
   2:            Margin="120" MaxHeight="500">
   3:   
   4:              <!--Item的模板-->
   5:              <GridView.ItemTemplate>
   6:                  <DataTemplate>
   7:                      <StackPanel Margin="10,10,0,0" Orientation="Horizontal" HorizontalAlignment="Left" Width="300">
   8:                          <Image Source="{Binding Image}" Height="80" Width="100" VerticalAlignment="Center" Margin="0,0,10,0" HorizontalAlignment="Left"/>
   9:                          <StackPanel Orientation="Vertical" Margin="0" HorizontalAlignment="Left">
  10:                              <TextBlock Text="{Binding Name}" FontWeight="Bold" Style="{StaticResource ItemTextStyle}"/>
  11:                              <TextBlock Text="{Binding Number}"  Style="{StaticResource ItemTextStyle}"/>
  12:                              <TextBlock Text="{Binding PositionInTeam}" Style="{StaticResource ItemTextStyle}"/>
  13:                          </StackPanel>
  14:                      </StackPanel>
  15:                  </DataTemplate>
  16:              </GridView.ItemTemplate>
  17:   
  18:              <!--所有的Group在GridView中的排列方式-->
  19:              <GridView.ItemsPanel>
  20:                  <ItemsPanelTemplate>
  21:                      <StackPanel Orientation="Horizontal"/>
  22:                  </ItemsPanelTemplate>
  23:              </GridView.ItemsPanel>
  24:   
  25:              <GridView.GroupStyle>
  26:                  <GroupStyle HidesIfEmpty="True">
  27:   
  28:                      <!--Group标题的模板-->
  29:                      <GroupStyle.HeaderTemplate>
  30:                          <DataTemplate>
  31:                              <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" Margin="0">
  32:                                  <TextBlock Text="{Binding Name}" Foreground="Gray" FontSize="25" Margin="5"></TextBlock>
  33:                              </Grid>
  34:                          </DataTemplate>
  35:                      </GroupStyle.HeaderTemplate>
  36:   
  37:                      <!--GroupItem样式-->
  38:                      <GroupStyle.ContainerStyle>
  39:                          <Style TargetType="GroupItem">
  40:                              <Setter Property="FontFamily" Value="Segoe UI" />
  41:                              <Setter Property="Padding" Value="0" />
  42:                              <Setter Property="Margin" Value="0,0,0,0" />
  43:                              <Setter Property="HorizontalContentAlignment" Value="Left" />
  44:                              <Setter Property="VerticalContentAlignment" Value="Top" />
  45:                              <Setter Property="BorderThickness" Value="0"/>
  46:                              <Setter Property="TabNavigation" Value="Local" />
  47:                          </Style>
  48:                      </GroupStyle.ContainerStyle>
  49:   
  50:                      <!--Item在Group中的排列方式-->
  51:                      <GroupStyle.Panel>
  52:                          <ItemsPanelTemplate>
  53:                              <VariableSizedWrapGrid/>
  54:                          </ItemsPanelTemplate>
  55:                      </GroupStyle.Panel>
  56:                  </GroupStyle>
  57:              </GridView.GroupStyle>
  58:          </GridView>

Code Behind

   1:  protected override void OnNavigatedTo(NavigationEventArgs e)
   2:          {
   3:              cvsPlayers.Source = new SampleDataSource().GetPlayerList();
   4:              cvsTeams.Source = new SampleDataSource().GetGroupedTeamData();
   5:          }

 

 

可运行Sample下载链接:

https://skydrive.live.com/redir?resid=E6E173A69F1B1C54!1434&authkey=!ALh7u2nSHlc0Uig

posted @ 2012-12-19 18:13  Allen Li  阅读(3238)  评论(2编辑  收藏  举报