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>
如果你有一个想法 ?谢谢你的时间,
问候。
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>