Csharp/C#教程:WPF:将Collection与Collection绑定到带有组的ListBox分享


WPF:将Collection与Collection绑定到带有组的ListBox

有时候WPF对我来说太复杂了。 我的“Window1”collections了一组“群组”。 “Group”是一个包含“Person”集合的类。 最后,这应该是联系人列表。 我只想在ListBox中显示其人员组,其中列表组的组名称等于我的类“Groups”的Name属性。

我试过将CollectionViewSource绑定到“Collection”。 这些组显示正确,但列表中的项目等于组名称。 因此每个组只有一个项目:组名。

这里的许多示例显示仅具有一个集合的项目分组。 我能做的是将组名设置为“人物”的属性。 但后来我无法计算(这是非常必要的): – 每组中有多少人 – 有多少人拥有“状态”“在线”。

我在“Group”类中使用linq来计算它。 感谢您提供帮助我入门的任何建议。

好吧,我不确定这是否是您想要实现的目标,但这是一种可以尝试的方法:

假设你的课程是这样的:

public class Group { public string Name { get; set; } public List Contacts { get; set; } } public class Contact { public string Name { get; set; } public bool IsOnline { get; set; } } 

您可以将ListBox.ItemTemplate设置为另一个ListBox绑定到Contacts属性,如:

                           

你必须设计内部列表框的样式。

编辑 :使用TreeView另一种解决方案

           

如果您有一个编程WPF的副本,请跳转到第221页。如果不是,我将总结(以我的无能为力的方式)

首先,您不需要手动对Person对象进行分组。

如果每个Person对象都有一个Group属性,

 People people = // retrieve the List somehow ICollectionView view = CollectionViewSource.GetDefaultView(people); view.GroupDescriptions.Add( new PropertyGroupDescription("Group") ); 

从ItemsControl派生的所有控件都可以显示分组的项目,因此

 // the XAML      

您还可以定义自定义GroupStyle并指定GroupStyle.HeaderTemplate以定义显示自定义属性的新DataTemplate,例如’some PropertyValue(Count)’ – 将一个TextBlock {Binding SomeProperty}{Binding ItemCount} ,将另一个{Binding ItemCount}{Binding ItemCount}

HTH

上述就是C#学习教程:WPF:将Collection与Collection绑定到带有组的ListBox分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/962266.html

(0)
上一篇 2021年11月26日
下一篇 2021年11月26日

精彩推荐