LINQ的分组(GroupBy方法)返回一个IEnumerable<IGrouping<TKey, TElement>>对象,其中TKey和TElement分别是键和值的类型。
而这个IGrouping<TKey, TElement>类型就继承IEnumerable<TElement>用来代表一系列的分组后对象。组的值(键值)可以通过IGrouping的Key属性得到(类型是TKey)。(可以参考MSDN:http://msdn.microsoft.com/zh-cn/library/bb344977.aspx)
了解了IGrouping,WPF的数据绑定就好说了,看代码:
XAML:
<Window.Resources>
<HierarchicalDataTemplate x:Key="dt" ItemsSource="{Binding}">
<TextBlock Text="{Binding Key,StringFormat=除3余数:{0}}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<TreeView Name="treeView" ItemTemplate="{StaticResource dt}"></TreeView>
</Grid>
赋值和LINQ代码:
int[] arr = { 1, 2, 3, 4, 5, 6 };
treeView.ItemsSource = arr.GroupBy(i => i % 3);
结果: