C#递归获取文件夹下所有文件 并绑定到 WPF TreeView控件中


导言:C#递归获取文件夹下所有文件 并绑定到 WPF TreeView控件中 代码片段

一、代码片段

1、前端代码:

 <TreeView x:Name="BookMarkTree" SelectedItemChanged="BookMarkTree_SelectedItemChanged" BorderThickness="2" >
	<TreeView.ItemTemplate>
		<HierarchicalDataTemplate ItemsSource="{Binding Children}">
			<StackPanel Orientation="Vertical">
                 <TextBlock Text="{Binding Name}"></TextBlock>
			</StackPanel>
		</HierarchicalDataTemplate>
	</TreeView.ItemTemplate>
</TreeView>

2、后端代码

//待绑定的数据节点
public class Node
{
	public string Name { get; set; }
	public List<Node> Children { set; get; }
	public Node()
	{
		Children = new List<Node>();
	}
}

//递归获取文件并生成节点
 public Node GetChildren(DirectoryInfo directoryInfo)
{
	Node node = new Node() { Name = directoryInfo.Name };
	var subDirectory = directoryInfo.GetDirectories();
	var files = directoryInfo.GetFiles();
	if(files.Length !=0)
	{
		foreach (var item in files)
		{
			//获取文件名,去除后缀
			node.Children.Add(new Node { Name = item.Name.Replace(".html","")});
		}
	}

	if (subDirectory.Length != 0)
	{
		foreach (var item in subDirectory)
		{
			//连续迭代
			node.Children.Add(GetChildren(item));
		}
	}
	
	return node;
}

//绑定treeview选择响应
private void BookMarkTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
	TreeView treeView = (TreeView)sender;

	Node item = (Node)treeView.SelectedItem;

	//下面可以对 item 进行操作
}

二、使用用例

/* 包含原路径 */
//获取节点
DirectoryInfo directoryInfo = new DirectoryInfo("./Documents/Help/Pages");
List<Node> nodes = new List<Node>();      
nodes.Add(GetChildren(directoryInfo));

//为TreeView绑定 ItemsSource
BookMarkTree.ItemsSource = nodes;


/* 只包含路径下面内容 */
DirectoryInfo directoryInfo = new DirectoryInfo("./Documents/Help/Pages");
List<Node> nodes = new List<Node>();

//处理html文件
for(int i =0;i < directoryInfo.GetFiles().Length; i++)
{
	nodes.Add(new Node {Name =  directoryInfo.GetFiles()[i].Name.Replace(".html", ""), Url = directoryInfo.GetFiles()[i].FullName });
}

//处理文件夹
for (int i = 0; i < directoryInfo.GetDirectories().Length; i++)
{
	nodes.Add(getChildren(directoryInfo.GetDirectories()[i]));
}

//为TreeView绑定 ItemsSource
BookMarkTree.ItemsSource = nodes;

三、测试结果

1、测试数据视图:

1、包含原路径:

![在这里插入图片描述](https://img-blog.csdnimg.cn/a1c717a915c443a59063b60bff12dd53.png

2、不包含原路径,只包含该路径下面内容:

在这里插入图片描述

2、 软件截图:

1、 包含原路径:

在这里插入图片描述

2、不包含原路径,只包含路径下面内容

在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太阳风暴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值