C# 如何将树视图中一个列表中的子对象分组?
我该如何列出一个列表,然后在一个树状视图组中按他们的班级列出它们?我读过,但它没有对子对象进行分组,而是在集合中具有相关属性C# 如何将树视图中一个列表中的子对象分组?,c#,wpf,treeview,hierarchicaldatatemplate,C#,Wpf,Treeview,Hierarchicaldatatemplate,我该如何列出一个列表,然后在一个树状视图组中按他们的班级列出它们?我读过,但它没有对子对象进行分组,而是在集合中具有相关属性 仓库 A型 亚型1 亚型2 B型 C型 如果我有一个包含所有这些类型的列表,我如何在树视图中显示分组 以前,我是手动添加它们的,一次添加一个TreeViewItem List<Warehouse> myWarehouse = new List<Warehouse>(); TreeViewItem WarehouseNode = new
- 仓库
- A型
- 亚型1
- 亚型2
- B型
- C型
- A型
List<Warehouse> myWarehouse = new List<Warehouse>();
TreeViewItem WarehouseNode = new TreeViewItem() { Header = "Warehouse" };
TreeViewItem TypeANode = new TreeViewItem() { Header = "Type A" };
foreach(SubtypeA type in myWarehouse) {
TypeANode.Items.Add(new TreeViewItem() { Header = type.Name };
}
WarehouseNode.Items.Add(TypeANode);
etc. for Type B and Type C.
我写了一个DataTemplateSelector
:
class MyTemplateSelector : DataTemplateSelector {
public override DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container) {
MethodInfo mi = container.GetType().GetMethod("FindResource") as MethodInfo;
if(mi != null) {
string strItem = item.ToString().Split('.').Last();
switch(item.ToString().Split('.').Last()) {
case "Type A":
return mi.Invoke(container, new object[] { "TypeATemplate" }) as DataTemplate;
case "Type B":
return mi.Invoke(container, new object[] { "TypeBTemplate" }) as DataTemplate;
case "Type C":
return mi.Invoke(container, new object[] { "TypeCTemplate" }) as DataTemplate;
}
return null;
}
return null;
}
}
但现在,当我看树景时,它告诉我:
- B型
- B型
- B型
- C型
- 等等
CollectionViewSource.GetDefaultView(yourCollection).GroupDescriptions.Add(
new PropertyGroupDescription("PropertyName"));
也可以在XAML中通过显式创建CollectionViewSource来实现
<CollectionViewSource
Source="{StaticResource yourCollection}"
xmlns:dat="clr-namespace:System.Windows.Data;assembly=PresentationFramework">
<CollectionViewSource.GroupDescriptions>
<dat:PropertyGroupDescription PropertyName="PropertyName"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
另外,还可以查看按
属性分组而不是按对象类型本身分组的。
<CollectionViewSource
Source="{StaticResource yourCollection}"
xmlns:dat="clr-namespace:System.Windows.Data;assembly=PresentationFramework">
<CollectionViewSource.GroupDescriptions>
<dat:PropertyGroupDescription PropertyName="PropertyName"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>