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