Winrt C# - 按字母顺序排序Gridview和组

时间:2013-10-17 15:18:39

标签: c# gridview listbox group-by windows-runtime

我今天来找你,因为我不知道如何解决这个问题。我想按字母顺序排序我的Gridview,这很容易。但是我想在第一封信的每一组之前添加一封信的格子。像Windows 8的“联系”应用程序这样的组合。

像这样:

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

这是gridview的代码。我将数据绑定到此gridview,我想在每组字母之间添加另一个vignet和该组的字母。

<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>

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

问候。

1 个答案:

答案 0 :(得分: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 - 它会调用该方法并将结果分配给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> 

GridView然后使用CollectionViewSource作为其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>