gpt4 book ai didi

c# - 具有不同类别下的子节点的 WPF TreeView

转载 作者:行者123 更新时间:2023-11-30 16:41:03 24 4
gpt4 key购买 nike

给定以下类(class) Foo

class Foo {
public string Property1 { get; set; }
public string Property2 { get; set; }
}

给定一个 List<Foo>其中 Property1是一个类别,因此集合中 Foo 的多个实例具有相同的 Property1 值. Property2在这种情况下是唯一的,但这不相关。

我想在 WPF 的 TreeView 中显示 Foo 的集合,其中每个 Distinct Property1它显示了一个节点(标题为 Property1 的值)。作为该节点的子项,它应该具有 Foo 的所有实例以及 Property1 , 它应该有 Property2作为标题。

到目前为止,我已经尝试了 HierarchicalDataTemplate方法(更喜欢)和背后的代码,但似乎都没有我想要的结果。这是我尝试过的代码:

private void ReloadTree() {
var uniqueProperty1 = foos
.Select(f => f.Property1)
.Distinct();

var result = new List<TreeViewItem>();

foreach (var prop1 in uniqueProperty1) {
var item = new TreeViewItem();
item.Header = name;
item.IsExpanded = false;

var attributes = new List<Foo>();

foreach (var foo in attributes) {
var subItem = new TreeViewItem();
subItem.Header = foo.Property2;

item.Items.Add(subItem);
}

bindingsTree.Items.Add(item);
}
}

在哪里foosFoo的集合, 和 bindingsTreeTreeView .非常感谢任何帮助!

编辑

为了阐明以下 foos 列表:

var list = new List<Foo>()
{
new Foo() { Property1 = "category1", Property2 = "A" },
new Foo() { Property1 = "category1", Property2 = "B" },
new Foo() { Property1 = "category2", Property2 = "C" },
new Foo() { Property1 = "category2", Property2 = "D" },
};

结果应该是这样的:

+category1
- A
- B
+category2
- C
- D

最佳答案

创建分层模型类型:

class FooViewModel
{
public string Category { get; set; }
public IEnumerable<FooViewModel> Children { get; set; }
}

...并按 Property1foos 进行分组:

private void ReloadTree()
{
var categories = foos
.GroupBy(x => x.Property1)
.Select(x => new FooViewModel { Category = x.Key, Children = x.Select(y => new FooViewModel() { Category = y.Property2 }).ToArray() })
.ToArray();

bindingsTree.ItemsSource = categories;
}

XAML:

<TreeView x:Name="bindingsTree">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Category}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>

关于c# - 具有不同类别下的子节点的 WPF TreeView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49980944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com