2

私はかなり初心者のプログラマーで、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が として設定されています。PageDataContext

<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) 型です。KeyGroupIEnumerable(Of IGrouping(Of TKey, TItem))

それで、私はここで何が間違っていますか?私が見逃している LINQ の VB.NET 実装に対する別の警告はありますか? 設定し忘れているプロパティはありますか? これを行う正しい方法は何ですか?

4

1 に答える 1

1

解決策を見つけましたが、それが理想的な解決策かどうかはわかりません。LINQ クエリの結果はアイテムGroupをその匿名型のプロパティに配置するため、それCollectionViewSourceを知る必要があります。ItemsPath="Group"そのため、 を定義する XAMLに追加することCollectionViewSourceで、グループ ヘッダーと含まれる項目の両方が表示されるようになりました。

于 2013-07-09T17:24:58.040 に答える