0

我今天来找你是因为我不知道如何解决这个问题。我想按字母顺序订购我的 Gridview,这很容易。但是我想在每组第一个字母之前添加一个字母的小插曲。类似于 Windows 8 的“联系人”应用程序的功能。

像这样 :

 - A :
 aaaa
 aaaann
 aananana
- B :
bbbaaaa
bbbabbbb
bbbaccc
 -C : 
cccc...

这是gridview的代码。我将数据绑定到此网格视图,并且我想在每组字母之间添加另一个带有该组字母的小插图。

<Grid>
                    <DataTemplate>
                        <GridView ItemsSource="{Binding Path=Data}" 
                                  IsItemClickEnabled="True" SelectionMode="None">
                            <GridView.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <VariableSizedWrapGrid Orientation="Vertical" ItemWidth="280" />
                                </ItemsPanelTemplate>
                            </GridView.ItemsPanel>
                        </GridView>
                    </DataTemplate>
        </Grid>

如果你有一个想法?谢谢你的时间,

问候。

4

1 回答 1

3

Bingoogle,你会找到答案。http://code.msdn.microsoft.com/windowsapps/GroupedGridView-77c59e8e

SampleDataSource示例应用程序中有这个方法:

    internal List<GroupInfoList<object>> GetGroupsByLetter() 
    { 
        List<GroupInfoList<object>> groups = new List<GroupInfoList<object>>(); 

        var query = from item in Collection 
                    orderby ((Item)item).Title 
                    group item by ((Item)item).Title[0] into g 
                    select new { GroupName = g.Key, Items = g }; 
        foreach (var g in query) 
        { 
            GroupInfoList<object> info = new GroupInfoList<object>(); 
            info.Key = g.GroupName; 
            foreach (var item in g.Items) 
            { 
                info.Add(item); 
            } 
            groups.Add(info); 
        } 

        return groups; 

    } 
} 

如果您查看 Scenario2.xaml.cs - 它会调用该方法并将结果分配给 a CollectionViewSource

List<GroupInfoList<object>> dataLetter = _storeData.GetGroupsByLetter(); 

// sets the CollectionViewSource in the XAML page resources to the data groups 
cvs2.Source = dataLetter; 

cvs2在页面的 XAML 代码中定义为资源:

<common:LayoutAwarePage.Resources> 
    <CollectionViewSource x:Name="cvs2" IsSourceGrouped="true" /> 
</common:LayoutAwarePage.Resources> 

然后GridViewCollectionViewSource用作其ItemsCollection并为DataTemplates组和项目定义 :

        <GridView x:Name="ItemsByLetter"  VerticalAlignment="Bottom"  
                  Height="325" 
                  Width="1150" 
                  ItemsSource="{Binding Source={StaticResource cvs2}}" 
                  ShowsScrollingPlaceholders="False" 
                  ContainerContentChanging="ItemsByLetter_ContainerContentChanging" 
                  BorderBrush="{StaticResource ApplicationForegroundThemeBrush}" BorderThickness="1"> 

            <GridView.ItemsPanel> 
                <ItemsPanelTemplate> 
                    <ItemsWrapGrid GroupHeaderPlacement="Left" /> 
                </ItemsPanelTemplate> 
            </GridView.ItemsPanel> 
            <GridView.ItemTemplate> 
                <DataTemplate> 
                    <local:ItemViewer/> 
                </DataTemplate> 
            </GridView.ItemTemplate> 

            <GridView.GroupStyle> 
                <GroupStyle> 
                    <GroupStyle.HeaderTemplate> 
                        <DataTemplate> 
                            <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" Margin="10"> 
                                <TextBlock Text='{Binding Key}' Foreground="{StaticResource ApplicationForegroundThemeBrush}" FontSize="25" Margin="5" /> 
                            </Grid> 
                        </DataTemplate> 
                    </GroupStyle.HeaderTemplate> 
                </GroupStyle> 
            </GridView.GroupStyle> 
        </GridView> 
于 2013-10-17T15:39:29.890 回答