1

我有一个字典,其中键是字符串,元素是列表

我想从元素中的每个键创建一个组。但我不知道怎么做

<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="{Binding Source={StaticResource groupedItemsViewSource}}"
      IsSwipeEnabled="True">
            <GridView.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding name}"
           Foreground="White" />
                </DataTemplate>
            </GridView.ItemTemplate>
            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>
            <GridView.GroupStyle>
                <GroupStyle>
                    <GroupStyle.HeaderTemplate>
                        <DataTemplate>
<TextBlock Text="Test 123" Foreground="Gold" />
                        </DataTemplate>
                    </GroupStyle.HeaderTemplate>
                    <GroupStyle.Panel>
                        <ItemsPanelTemplate>
                            <VariableSizedWrapGrid Orientation="Vertical" />
                        </ItemsPanelTemplate>
                    </GroupStyle.Panel>
                </GroupStyle>
            </GridView.GroupStyle>
        </GridView>

在循环中我创建字典

groups.Add(this.letters[i], items);

之后我有

groupedItemsViewSource.Source = groups;

但我什么也得不到。我应该如何更正此问题以将键作为组标题,并将每个列表作为此网格中的元素列表?

// 编辑

好的,我发现制作 List> 而不是 Dictionary 更好。我现在得到 3 个组标题(因为我的列表中有 3 个列表)但没有项目。IMO这是比第一个更好的方法

// 编辑 2 我没有看到项目导致背景和前景是白色的。愚蠢的我:) 但现在我有最后一个问题要解决。如何动态设置组标题?

4

2 回答 2

1

您实际上不必创建自定义类来启用分组。事实上,你可以使用 LINQ 来为你做这件事:

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

cvsActivities.Source = 结果;

为了在 GridView 中显示分组项目,您必须使用 CollectionViewSource。仅将组设置为 GridView.ItemsSource 是行不通的。您必须设置 GridView.ItemsSource = a CollectionViewSource 并且 CollectionViewSource 必须指向组。您可能还必须设置 CollectionViewSource.IsSourceGrouped = true。

于 2012-08-27T21:19:48.913 回答
0

字典没有实现 INotifyPropertyChanged 或 INotifyCollectionChanged 如果您想要绑定工作,这是必需的

public class yourclass
{
    public string Key { get; set; }
    public int Value { get; set; }
}


ObservableCollection<yourclass> dict = new ObservableCollection<MyCustomClass>();
dict.Add(new yourclass{Key = "yourkey", Value = whatyouwant});
dict.Add(new yourclass{ Key = "yourkey2", Value = whatyouwant });
于 2012-08-26T11:42:06.497 回答