2012-06-04 40 views
2

是否有一种方法可以在XAML中纯粹声明性地定义GridView?我看到的每个示例都在后面的代码中定义了类别/组名称值,然后每个项目都有一个标题/子标题。我真的想找出一种方法来做类似如下的事情:声明式GridView在WinRT中的XAML中

<GridView 
    x:Name="itemGridView" 
    AutomationProperties.AutomationId="ItemGridView" 
    AutomationProperties.Name="Grouped Items" 
    Grid.Row="1" 
    Margin="0,-3,0,0" 
    Padding="116,0,40,46" 
    ItemTemplate="{StaticResource Standard250x250ItemTemplate}"> 

    <GridView.ItemsPanel> 
    <ItemsPanelTemplate>       
     <VirtualizingStackPanel Orientation="Horizontal"/> 
    </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 

    <GridView.GroupStyle> 
    <GroupStyle> 
     <GroupStyle.HeaderTemplate> 
     <DataTemplate> 
      <Grid Margin="1,0,0,6"> 
      <Button 
       AutomationProperties.Name="Group Title" 
       Content="{Binding Tag}" 
       Style="{StaticResource TextButtonStyle}"/> 
      </Grid> 
     </DataTemplate> 
     </GroupStyle.HeaderTemplate> 

     <GroupStyle.Panel> 
     <ItemsPanelTemplate> 
      <VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,80,0"/> 
     </ItemsPanelTemplate> 
     </GroupStyle.Panel> 
    </GroupStyle> 
    </GridView.GroupStyle> 

    <GridView.Items> 
    <Grid x:Name="tab1" Tag="Tab 1" AutomationProperties.Name="Group Title" HorizontalAlignment="Left" Width="250" Height="250"> 
     <!-- Tab COntent --> 
    </Grid> 

    <Grid x:Name="tab2" Tag="Tab 2" AutomationProperties.Name="Tab 2" HorizontalAlignment="Left" Width="250" Height="250"> 
     <!-- Tab Content --> 
    </Grid> 
    </GridView.Items> 
</GridView> 

不幸的是,这个例子不起作用。我似乎无法弄清楚如何以声明方式设置组名。感谢您的任何见解。

+0

您可以使用MVVM方法来做到这一点。如果你想要一个样本,让我知道。 – Krishna

+0

我有同样的问题。使用绑定只能绑定到相同类型的对象;但是如果每组有不同的对象呢?你解决了这个问题吗? –

回答

0

我认为以下方法是定制任何Gridview的好方法。

*如果你想实现你的电网多组风格,请做好这项工作:

步骤1.创建一个GroupSelector类并覆盖SelectStyleCore功能:

public class GroupStyleSelector : StyleSelector 
    { 
    public Style GroupStyle1 { get; set; } 
    public Style GroupStyle2 { get; set; } 

    protected override Windows.UI.Xaml.Style SelectStyleCore(object item, Windows.UI.Xaml.DependencyObject container) 
    { 

     var viewGroup = item as ICollectionViewGroup; 
     if (viewGroup != null) 
     { 
      //var groupModel = viewGroup.Group as YourGroupModel; 
      if (condition1) 
      { 
       return GroupStyle1; 
      } 
      else if (condition2) 
      { 
       return GroupStyle2; 
      } 
     } 
    } 
} 

第2步:在XAML资源,请添加以下代码:

<Style x:Key="YourGroupStyle1" TargetType="GroupItem"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="GroupItem"> 
       <!-- Add your custom layout here for Group style 1 --> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
    <Style x:Key="YourGroupStyle2" TargetType="GroupItem"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="GroupItem"> 
       <!-- Add your custom layout here for Group style 1 --> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<customstyle:GroupStyleSelector x:Key="GroupStyleSelector" 
           GroupStyle1="{StaticResource GroupStyle1}" 
           GroupStyle2="{StaticResource GroupStyle2}"/> 

customstyle链接到存储GroupStyleSelector类的名称空间。

第3步:如果您要自定义HeaderTemplate中请让我知道,如果没有用户当前从微软GridApp样品GridView控件

将样式选择。

如果您想自定义一组每个项目的布局,你也别simiar到GroupStyleSelector: 创建DataTemplateSeletor(从TemplateSelector继承),然后分配给它的GridView控件

<GridView ItemTemplateSelector="{StaticResource ItemTemplateSelector}"> 
    <GridView.GroupStyle> 
     <GroupStyle ContainerStyleSelector="{StaticResource GroupStyleSelector}"> 
      <GroupStyle.HeaderTemplate .../> 
    </GridView.GroupStyle> 

希望我的指南清楚为你。 如果有任何问题,请讨论。