2012-08-27 2 views
1

그리드 뷰에서 그룹화 된 콜렉션에 대한 콜렉션을 어떻게 작성해야합니까?그룹화 된 그리드 뷰의 데이터를 구성하는 방법

그룹을 만들 때 각 그룹의 그룹 및 요소 수가 많은 그룹화 된 데이터를 얻지 만 그룹 제목이 없습니다. 두 개의 필드

public String Key; 
public List<MyObject> items; 

있다 그래서 만든 객체 MyGroupedObject 그래서 객체에 있음을 분류했다. 그러나 그리드 뷰 (아래처럼)를 전달할 때 나는 아무것도 가지지 않습니다. 에있는 gridview에 난 그냥 ItemsSource

으로이 컬렉션에 바인딩보다 아이템 없음, 아니 그룹없고 아무것도

<Page.Resources> 
<!-- 
    Collection of grouped items displayed by this page, bound to a subset 
    of the complete item list because items in groups cannot be virtualized 
--> 
<CollectionViewSource 
    x:Name="groupedItemsViewSource" 
    IsSourceGrouped="true" 
    /> 

</Page.Resources> 

이 질문에 기반하지 : 나는 새로운 원인을 만든 how to create gridview from dictionary

원래는이다 많은 질문을하므로 모두 명확하게하고 싶습니다.

답변

2

그룹화 및 시맨틱 줌 샘플을 보았습니까? http://code.msdn.microsoft.com/windowsapps/groupedgridview-77c59e8e

또한 목록 또는 그리드의 방법 그룹 항목을 볼 수 있습니다 ... http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh780627.aspx

짧은 설명 당신은 그것을 두 가지 방법 중 하나를 수행 할 수 있습니다 ...입니다 ...

List<Activity> Activities = new List<Activity>(); 
Activities.Add(new Activity() 
    { Name = "Activity 1", Complete = true, 
      DueDate = startDate.AddDays(4), Project = "Project 1" }); 
Activities.Add(new Activity() 
    { Name = "Activity 2", Complete = true, 
      DueDate = startDate.AddDays(5), Project = "Project 2" }); 

는이 CollectionViewSource

var result = from act in Activities 
      group act by act.Project into grp 
      orderby grp.Key select grp; 
cvsActivities.Source = result; 

의 데이터를 얻기 위해 다음 아니면 객체 PROPERT를 사용하여 계층 구조를 구축 할 수 있습니다 다음 이 같은 이거 ...

List<Project> Projects = new List<Project>(); 

Project newProject = new Project(); 
newProject.Name = "Project 1"; 
newProject.Activities.Add(new Activity() 
    { Name = "Activity 1", Complete = true, DueDate = startDate.AddDays(4) }); 
newProject.Activities.Add(new Activity() 
    { Name = "Activity 2", Complete = true, DueDate = startDate.AddDays(5) }); 
newProject.Activities.Add(new Activity() 
    { Name = "Activity 3", Complete = false, DueDate = startDate.AddDays(7) }); 
newProject = new Project(); 
newProject.Name = "Project 2"; 
newProject.Activities.Add(new Activity() 
    { Name = "Activity A", Complete = true, DueDate = startDate.AddDays(2) }); 
newProject.Activities.Add(new Activity() 
    { Name = "Activity B", Complete = false, DueDate = startDate.AddDays(3) }); 
cvsProjects.Source = Projects; 

당신은 간단한 목록에 결합하고,이 자동으로 구성 그룹화 할 수 없습니다.

+0

로 정의되어야한다

class MyGroupObject { public String Key; // used for group title public IList<MyObject> Items; } 

같은

로 정의하지만, 프로젝트 예제는 내가 한 정확히 무엇된다 IList<MyGroupObject>을 설명하는 것처럼해야한다. 이름 (내 키) 및 활동 (내 항목)이있는 개체 프로젝트가 있습니다. 나는 그것을 수집하기 위해 소스로 설정했다. 이것은 제가 설명하고 행동하지 않는 것입니다. 링크를 주셔서 감사합니다. – Fixus

+0

링크를 확인하고 귀중한 것이라고 설명합니다. 해결책을 찾았습니다. 문제는 내 데이터 모델에서 하나의 작은 실수 였고 그룹화가 개선되었습니다. 이제 모든 것이 잘 작동합니다. – Fixus

+0

위의 내용이 분명하지 않은 경우 키가 CollectionViewSource를 사용하고 있습니다. 이 "collection of collections"을 GridView.ItemsSource로 설정하면 작동하지 않습니다. GridView.ItemsSource = CollectionViewSource를 설정해야하며 CollectionViewSource는 "컬렉션 모음"을 가리켜 야합니다. 또한 CollectionViewSource.IsSourceGrouped = true로 설정해야 할 수도 있습니다. –

1

데이터가 MyGroupObject이 그런 다음 CollectionViewSource이 같은

<CollectionViewSource 
    x:Name="groupedItemsViewSource" 
    IsSourceGrouped="true" 
    Source="{Binding GroupItems}" <!-- Property in the backing ViewModel --> 
    ItemsPath="Items" <!-- Property on the MyGroupObject class --> 
/> 
+0

코드에서만 diffrence가 있었고 내가 한 것은 내 CS 파일'groupedItemsViewSrouce.Source = groups'에서 사용하는 것입니다. 여기서 groups는 그룹화 된 객체의 목록입니다.그것은 작동하지 않습니다 :/ – Fixus

+0

그룹의 항목을 보는 데 필요한'ItemsPath'도 포함 시켰습니다. –

+0

그래, 이미 이것을 시도한 것을 볼 수 있습니다. 하지만 지금 나는 올바른 길을 가고 있다고 생각합니다. 나는 당신과 제프의 충고를 사용하여 처음부터 모든 것을 시작했습니다. 그리고 저는 어딘가에 들어가기 시작했습니다. – Fixus

관련 문제