【IT168技术文档】
如果使用了WPF而不使用数据绑定(手工在界面和数据间进行同步),总会感觉不值.但是大部分讨论WPF数据绑定的文章,主题大多集中在ListBox这样平坦的数据集合上,讲如何绑定层次结构数据的比较少,这里我就通过一个简单的显示磁盘目录树的例子来展示如何完成这样的任务.
第一步,当然是定义要绑定的数据类型了.
在目录树这个例子中,每个TreeViewItem要显示的数据可以用System.IO.DirectoryInfo来表示,但是这样做有一个麻烦: DirectoryInfo只能通过GetDirectories()方法来获取子目录,但是WPF里的数据绑定则更倾向于使用属性在数据间导航,所以为了更方便地使用数据绑定,我们最好还是自定义一个类来完成这样的工作:
这个类所作的工作很简单,就是正规化目录路径,获取目录名称,以及延迟加载子目录(以提升性能)的列表,我们的界面也只要求它具有这些功能就行了.using System.Collections.Generic; using System.IO; namespace WpfApplication1 { class BindDirectory { public BindDirectory(string directoryPath) { //正规化目录路径,确保Path以'\\'结尾 directoryPath = directoryPath.TrimEnd('\\'); Path = directoryPath + '\\'; //计算出目录名称(不包含路径) int indexLastSlash = directoryPath.LastIndexOf('\\'); if (indexLastSlash >= 0) { Name = directoryPath.Substring(indexLastSlash + 1); } else { Name = directoryPath; } } public string Name { get; private set; } public string Path { get; private set; } public IEnumerable<BindDirectory> Directories { get { //延迟加载 if (directories == null) { directories = new List<BindDirectory>(); foreach (string d in Directory.GetDirectories(Path)) { directories.Add(new BindDirectory(d)); } } return directories; } } List<BindDirectory> directories; } }