我有一个字典,其中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 我没看到物品导致背景和前景是白色的。愚蠢我:)但现在我有最后一个问题需要解决。如何动态设置组标题?
答案 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 });