如何从字典创建gridview

时间:2012-08-26 10:40:53

标签: c# xaml windows-8 windows-runtime winrt-xaml

我有一个字典,其中key是String,元素是List

我想使用元素中的元素从每个键创建一个组。但我不知道如何制作它

<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&gt;而不是字典更好。我现在得到3组标题(因为我的列表中有3个列表)但没有项目。 IMO这比第一个更好的方法

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

2 个答案:

答案 0 :(得分:1)

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

  

var result = from act in act group act by act.Project into grp   orderby grp.Key选择grp;

     

cvsActivities.Source = result;

要在GridView中显示分组的项目,您必须使用CollectionViewSource。只是将组设置为GridView.ItemsSource将不起作用。您必须设置GridView.ItemsSource = CollectionViewSource和CollectionViewSource必须指向组。您还可能需要设置CollectionViewSource.IsSourceGrouped = true。

答案 1 :(得分:0)

Dictionary不实现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 });