Winrt C# - 按字母顺序对网格视图和分组进行排序

本文关键字:视图 排序 网格 顺序 Winrt | 更新日期: 2023-09-27 18:35:52

我今天来找你,因为我不知道如何解决这个问题。我想按字母顺序对网格视图进行排序,这很容易。但是我想在第一组字母之前添加一个字母的暗影。类似于Windows 8的"联系人"应用程序。

喜欢这个:

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

这是网格视图的代码。我将数据绑定到此网格视图,我想在每组字母之间添加另一个带有该组字母的 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>

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

问候。

Winrt C# - 按字母顺序对网格视图和分组进行排序

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>