私はかなり初心者のプログラマーで、Windows ストア アプリを作成しています。ObservableCollection(Of T)
で表示するためにグループ化したい を含むオブジェクトがありますListView
。LINQ を使用してグループ化されたアイテムのセットを返すことが、最良かつ最も簡単な選択のように思えます。私が見つけたすべてのドキュメントには、Group By が返され、True にIEnumerable(Of IGrouping(Of TKey, TItem))
設定CollectionViewSource.IsSourceGrouped
し、CVS にバインドすると、すべてが完全に機能するはずであると書かれています。右?
それほどでもない。
を含むクラスがあります
Public Property Items As ObservableCollection(Of Item)
Public ReadOnly Property GroupedItems As IEnumerable
Get
' Return grouped items
End Get
End Property
また、ページの 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
がありますが、.ではなくある種の IEnumerable(Of anonymous) 型です。Key
Group
IEnumerable(Of IGrouping(Of TKey, TItem))
それで、私はここで何が間違っていますか?私が見逃している LINQ の VB.NET 実装に対する別の警告はありますか? 設定し忘れているプロパティはありますか? これを行う正しい方法は何ですか?