我是一个相当新手的程序员,正在制作一个 Windows 应用商店应用程序。我有一个对象,其中包含一个ObservableCollection(Of T)
我想分组以显示在ListView
. 使用 LINQ 返回一组分组项似乎是最好和最简单的选择。我能找到的每篇文档都说 Group By 返回IEnumerable(Of IGrouping(Of TKey, TItem))
并且您设置CollectionViewSource.IsSourceGrouped
为 True,绑定到 CVS,它应该都能完美运行。正确的?
没那么多。
我有一个包含
Public Property Items As ObservableCollection(Of Item)
Public ReadOnly Property GroupedItems As IEnumerable
Get
' Return grouped items
End Get
End Property
在页面的 XAML 中, whereGroupedItems
被设置为Page
's DataContext
in code-behind:
<Page.Resources>
<CollectionViewSource x:Name="GroupedItems" Source="{Binding}" IsSourceGrouped="True" />
</Page.Resources>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<ListView ItemsSource="{Binding Source={StaticResource GroupedItems}}">
<ListView.GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<!-- Template -->
</DataTemplate>
</GroupStyle.HeaderTemplate>
</ListView.GroupStyle>
<ListView.ItemTemplate>
<DataTemplate>
<!-- Template -->
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
现在,如果我直接将 绑定ListView
到,则会按预期呈现所有项目,紧随. 但是,当它绑定到应该分组时,会根据 呈现组,但不会呈现组内的任何项目。ObservableCollection(Of Item)
ListView
ItemTemplate
CollectionViewSource
ListView
HeaderTemplate
我检查了 LINQ 逻辑的结果:
Dim x = From i As Item In Items
Group i By Key = i.SubItem Into Group
并且x
有一个Key
属性和一个Group
属性,虽然它是某种 IEnumerable(Of anonymous) 类型而不是IEnumerable(Of IGrouping(Of TKey, TItem))
.
那么我在这里做错了什么?我缺少的 LINQ 的 VB.NET 实现是否还有另一个警告?有没有我忘记设置的属性?这样做的正确方法是什么?