如何按字母顺序对GridViewItems进行分组:Windows应用商店应用
我想按字母顺序对GridViewItems进行分组,并将字母显示为组标题。如何按字母顺序对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>
我需要
- 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();
}
}