我是一個相當新手的程序員,並製作Windows應用商店應用。我有一個包含ObservableCollection(Of T)
的對象,我想將它們分組顯示在ListView
中。使用LINQ返回一組分組項目似乎是最好也是最簡單的選擇。我可以找到的每一份文檔都說Group By返回IEnumerable(Of IGrouping(Of TKey, TItem))
,並且您將CollectionViewSource.IsSourceGrouped
設置爲True,綁定到CVS並且它應該都能正常工作。對?使用LINQ和VB.NET在Windows Store應用程序(Metro)中分組Collection的正確方法是什麼?
並非如此。
我有一個包含
Public Property Items As ObservableCollection(Of Item)
Public ReadOnly Property GroupedItems As IEnumerable
Get
' Return grouped items
End Get
End Property
和A類的XAML的頁面,在這裏GroupedItems
設置爲Page
的DataContext
在後臺代碼:
<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的(匿名)類型,而不是IEnumerable(Of IGrouping(Of TKey, TItem))
。
那麼我在這裏做錯了什麼?我錯過了LINQ的VB.NET實現嗎?我忘了設置一個屬性嗎?什麼是正確的方法來做到這一點?