2013-07-09 4 views
2

저는 꽤 초보 프로그래머이고 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 

을 포함하는 클래스를 가지고있는 PageDataContext 코드 숨김으로 설정 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> 

이제 경우 ListViewObservableCollection(Of Item)에 직접 바인딩하면 ListViewItemTemplate 다음에 예상대로 모든 항목을 렌더링합니다. 그러나 그것이 아마도 그룹화 된 CollectionViewSource에 바인딩되면 ListViewHeaderTemplate에 따라 그룹을 렌더링하지만 그룹 내의 항목은 렌더링하지 않습니다.

는 내가 LINQ 로직의 결과를 검사 한 : 그것은 일부 (익명의)는 IEnumerable의 종류 IEnumerable(Of IGrouping(Of TKey, TItem))보다는 입력이 비록

Dim x = From i As Item In Items 
     Group i By Key = i.SubItem Into Group 

그리고 xKey 속성과 Group 속성이 있습니다.

여기서 내가 뭘 잘못하고 있니? VB.NET LINQ 구현에 대한 또 다른 경고가 있습니까? 내가 설정하는 것을 잊고있는 부동산이 있습니까? 이 작업을 수행하는 올바른 방법은 무엇입니까?

답변

1

솔루션을 찾았지만 이상적인 솔루션이라는 것을 알지 못합니다. LINQ 쿼리의 결과는 항목을 Group 익명 형식의 속성으로 배치하기 때문에 CollectionViewSource에 해당 항목을 알 필요가 있습니다. 따라서 CollectionViewSource을 정의하는 XAML에 ItemsPath="Group"을 추가하면 그룹 머리글과 포함 항목이 모두 표시됩니다.