저는 꽤 초보 프로그래머이고 Windows Store App을 만들고 있습니다. ListView
에 표시하기 위해 그룹화하려는 ObservableCollection(Of T)
이 포함 된 개체가 있습니다. LINQ를 사용하여 그룹화 된 항목 집합을 반환하는 것이 가장 쉽고 쉬운 선택 인 것처럼 보입니다. 내가 찾을 수있는 모든 문서에서 Group By가 IEnumerable(Of IGrouping(Of TKey, TItem))
을 반환하고 CollectionViewSource.IsSourceGrouped
을 True로 설정하면 CVS에 바인딩하면 완벽하게 작동해야합니다. 권리?LINQ 및 VB.NET을 사용하여 Windows Store App (Metro)에서 모음을 그룹화하는 적절한 방법은 무엇입니까?
그리 많지 않습니다.
나는
Public Property Items As ObservableCollection(Of Item)
Public ReadOnly Property GroupedItems As IEnumerable
Get
' Return grouped items
End Get
End Property
을 포함하는 클래스를 가지고있는 Page
의 DataContext
코드 숨김으로 설정 GroupedItems
페이지에 대한 XAML에서 :
<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 로직의 결과를 검사 한 : 그것은 일부 (익명의)는 IEnumerable의 종류 IEnumerable(Of IGrouping(Of TKey, TItem))
보다는 입력이 비록
Dim x = From i As Item In Items
Group i By Key = i.SubItem Into Group
그리고 x
는 Key
속성과 Group
속성이 있습니다.
여기서 내가 뭘 잘못하고 있니? VB.NET LINQ 구현에 대한 또 다른 경고가 있습니까? 내가 설정하는 것을 잊고있는 부동산이 있습니까? 이 작업을 수행하는 올바른 방법은 무엇입니까?