如何按字母顺序对GridViewItems进行分组:Windows应用商店应用

如何按字母顺序对GridViewItems进行分组:Windows应用商店应用,gridview,windows-runtime,windows-store-apps,winrt-xaml,Gridview,Windows Runtime,Windows Store Apps,Winrt Xaml,我想按字母顺序对GridViewItems进行分组,并将字母显示为组标题。 我需要 GroupItems的标题 团体风格 项目面板的样式 GridViewItem的模板 并解释如何将分组的项目添加到CollectionViewSource。GridView分组可以使用CollectionViewSource完成。 在Xaml中,在页面的参考资料部分添加一个CollectionViewSource。确保IsSourceGrouped设置为true: <Page.Resources>

我想按字母顺序对GridViewItems进行分组,并将字母显示为组标题。
我需要

  • GroupItems的标题
  • 团体风格
  • 项目面板的样式
  • GridViewItem的模板

并解释如何将分组的项目添加到CollectionViewSource。

GridView分组可以使用CollectionViewSource完成。 在Xaml中,在页面的参考资料部分添加一个CollectionViewSource。确保IsSourceGrouped设置为true:

<Page.Resources>
    <CollectionViewSource x:Name="FruitsCollectionViewSource" IsSourceGrouped="True"/>
</Page.Resources>
初始化结果列表并将项目添加到结果列表

public ObservableCollection<Fruit> FruitList { get; set; }
    FruitList.Add(new Fruit { FruitName = "Blackberry", FruitImageSource = "../Assets/blackberry.jpg", FruitRate = "150" });
    FruitList.Add(new Fruit { FruitName = "Apple", FruitImageSource = "../Assets/apple.jpg", FruitRate = "150" });
    FruitList.Add(new Fruit { FruitName = "Orange", FruitImageSource = "../Assets/orange.jpg", FruitRate = "250" });
    FruitList.Add(new Fruit { FruitName = "Bilberry", FruitImageSource = "../Assets/bilberry.jpg", FruitRate = "250" });
    FruitList.Add(new Fruit { FruitName = "Banana", FruitImageSource = "../Assets/banana.jpg", FruitRate = "50" });
    FruitList.Add(new Fruit { FruitName = "Amla", FruitImageSource = "../Assets/amla.jpg", FruitRate = "120" });
现在您可以设置您的源CollectionViewSource 首先,我们需要对结果列表进行排序。然后使用此方法将水果名称按升序或降序分组

        FruitList = new ObservableCollection<Fruit>(FruitList .OrderBy(c => c.FruitName));
        FruitsCollectionViewSource.Source = GetGroupsByLetter();
fructList=newobserveCollection(fructList.OrderBy(c=>c.fructName));
FrootsCollectionViewSource.Source=GetGroupsByleter();
GetGroupsByLetter()结果列表中的项目进行分组

    internal List<GroupInfoList<object>> GetGroupsByLetter()
    {
        var groups = new List<GroupInfoList<object>>();

        var query = from item in FruitList
                    orderby ((Fruit)item).FruitName
                    group item by ((Fruit)item).FruitName[0] into g
                    select new { GroupName = g.Key, Items = g };
        foreach (var g in query)
        {
            var info = new GroupInfoList<object>();
            info.Key = g.GroupName;
            foreach (var item in g.Items)
            {
                info.Add(item);
            }

            groups.Add(info);
        }

        return groups;
    }
内部列表GetGroupsByLetter()
{
变量组=新列表();
var query=来自水果列表中的项目
orderby((水果)项)。水果名称
按((水果)项目)对项目进行分组。水果名称[0]为g
选择新{GroupName=g.Key,Items=g};
foreach(查询中的var g)
{
var info=新的GroupInfoList();
info.Key=g.GroupName;
foreach(g.Items中的var项)
{
信息添加(项目);
}
组。添加(信息);
}
返回组;
}
组信息列表:

    public class GroupInfoList<T> : List<object>
    {
        public object Key { get; set; }

        public new IEnumerator<object> GetEnumerator()
        {
            return (System.Collections.Generic.IEnumerator<object>)base.GetEnumerator();
        }
    }
公共类GroupInfoList:List
{
公共对象密钥{get;set;}
公共新IEnumerator GetEnumerator()
{
return(System.Collections.Generic.IEnumerator)base.GetEnumerator();
}
}
现在你完成了

您的GridView将如下所示


是的……这就是我要找的。
    internal List<GroupInfoList<object>> GetGroupsByLetter()
    {
        var groups = new List<GroupInfoList<object>>();

        var query = from item in FruitList
                    orderby ((Fruit)item).FruitName
                    group item by ((Fruit)item).FruitName[0] into g
                    select new { GroupName = g.Key, Items = g };
        foreach (var g in query)
        {
            var info = new GroupInfoList<object>();
            info.Key = g.GroupName;
            foreach (var item in g.Items)
            {
                info.Add(item);
            }

            groups.Add(info);
        }

        return groups;
    }
    public class GroupInfoList<T> : List<object>
    {
        public object Key { get; set; }

        public new IEnumerator<object> GetEnumerator()
        {
            return (System.Collections.Generic.IEnumerator<object>)base.GetEnumerator();
        }
    }