1

gridview でグループ化されたコレクションのコレクションを作成するにはどうすればよいですか?

グループを作成するList<List<MyObject>>と、各グループ内のグループと要素の数が多いグループ化されたデータが取得されますが、グループ タイトルがありません。だから私は2つのフィールドを持つオブジェクト MyGroupedObject を作成しました

public String Key;
public List<MyObject> items;

だから私はそれをオブジェクトにグループ化しました。しかし、それをグリッド ビュー (以下のように) に渡すと、何もありません。アイテムなし、グループなし

 <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>

gridview よりも、このコレクションを ItemsSource としてバインドするだけです

この質問はに基づいています:辞書からグリッドビューを作成する方法

元の新しい原因を作成したのは多くの質問に対するものなので、すべてを明確にしたい

4

2 に答える 2

2

グループ化とセマンティック ズームのサンプルを見たことがありますか? http://code.msdn.microsoft.com/windowsapps/groupedgridview-77c59e8e

リストまたはグリッドで項目をグループ化する方法も参照できます... http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh780627.aspx

簡単な説明は... 2つの方法のうちの1つを行うことができます...

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;

または、このようなオブジェクト プロパティを使用して階層を構築できます...

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;

単純なリストにバインドして、グループ化を自動的に構成することはできません。

于 2012-08-27T12:45:09.593 に答える
1

あなたのデータはIList<MyGroupObject>、MyGroupObjectがそのように定義されている場所で説明されているとおりでなければなりません

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

次に、あなたCollectionViewSourceはそのように定義する必要があります

<CollectionViewSource
    x:Name="groupedItemsViewSource"
    IsSourceGrouped="true"
    Source="{Binding GroupItems}" <!-- Property in the backing ViewModel -->
    ItemsPath="Items" <!-- Property on the MyGroupObject class -->
/>
于 2012-08-27T15:31:03.183 に答える