我今天来找你,因为我不知道如何解决这个问题。我想按字母顺序排序我的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>
如果你有想法?谢谢你的时间,
问候。
答案 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>