Vac*_*ano 4 c# wpf tree listview list
我有一个如下所示的列表:
Base/Level1/Item1 Base/Level1/Item2 Base/Level1/Sub1/Item1 Base/Level2/Item1 Base/Level3/Sub1/Item1
我想要一个简单的方法将其放入ListView.(即类似于此)
Base
|
+->Level1
| |
| +=Item1
| +=Item2
| |
| +->Sub1
| |
| +=Item1
|
+->Level2
| |
| +=Item1
|
+->Level3
|
+->Sub1
|
+=Item1
有没有一种既定的方法来进行这种转换,还是只需要自己解析?
(如果它可能是相关的,我的代码中的实际项目是TFS迭代路径.)
这将获取您的字符串列表并将其转换为适合使用TreeView查看的树,如您所述:
public IList BuildTree(IEnumerable<string> strings)
{
return
from s in strings
let split = s.Split("/")
group s by s.Split("/")[0] into g // Group by first component (before /)
select new
{
Name = g.Key,
Children = BuildTree( // Recursively build children
from s in grp
where s.Length > g.Key.Length+1
select s.Substring(g.Key.Length+1)) // Select remaining components
};
}
Run Code Online (Sandbox Code Playgroud)
这将返回一个匿名类型的树,每个树包含一个Name属性和一个Children属性.这可以被直接结合到TreeView通过指定HierarchicalDataTemplate与ItemsSource="{Binding Children}"和内容组成的<TextBlock Text="{Binding Name}">或类似的.
或者,如果需要其他成员或语义,可以在代码中定义树节点类.例如,给定此节点类:
public class Node
{
public string Name { get; set; }
public List<Node> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
你的BuildTree函数会略有不同:
public List<Node> BuildTree(IEnumerable<string> strings)
{
return (
from s in strings
let split = s.Split("/")
group s by s.Split("/")[0] into g // Group by first component (before /)
select new Node
{
Value = g.Key,
Children = BuildTree( // Recursively build children
from s in grp
where s.Length > g.Key.Length+1
select s.Substring(g.Key.Length+1)) // Select remaining components
}
).ToList();
}
Run Code Online (Sandbox Code Playgroud)
同样,这可以使用a直接绑定HierarchicalDataTemplate.我通常使用第一个解决方案(匿名类型),除非我想对树节点做一些特殊的事情.
| 归档时间: |
|
| 查看次数: |
2357 次 |
| 最近记录: |