WPF数据绑定在目录树构造中作用体现

WPF开发工具的使用,为开发人员带来了非常大的作用。开发人员在实际开发编程中,可以轻松灵活的实现与MAC相媲美的图形界面。#t#

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站制作、网站建设、夹江网络推广、成都小程序开发、夹江网络营销、夹江企业策划、夹江品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供夹江建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

如果使用了WPF而不使用数据绑定(手工在界面和数据间进行同步),总会感觉不值.但是大部分讨论WPF数据绑定的文章,主题大多集中在ListBox这样平坦的数据集合上,讲如何绑定层次结构数据的比较少,这里我就通过一个简单的显示磁盘目录树的例子来展示如何完成这样的任务.

WPF数据绑定第一步,当然是定义要绑定的数据类型了.

在目录树这个例子中,每个TreeViewItem要显示的数据可以用System.IO.DirectoryInfo来表示,但是这样做有一个麻烦:DirectoryInfo只能通过GetDirectories()方法来获取子目录,但是WPF里的数据绑定则更倾向于使用属性在数据间导航,所以为了更方便地使用WPF数据绑定,我们最好还是自定义一个类来完成这样的工作:

  1. using System.Collections.Generic;
  2. using System.IO;
  3. namespace WpfApplication1
  4. {
  5. class BindDirectory
  6. {
  7. public BindDirectory(string 
    directoryPath)
  8. {
  9. //正规化目录路径,确保Path以'\\'结尾
  10. directoryPathdirectoryPath = 
    directoryPath.TrimEnd('\\');
  11. Path = directoryPath + '\\';
  12. //计算出目录名称(不包含路径)
  13. int indexLastSlash = directoryPath.
    LastIndexOf('\\');
  14. if (indexLastSlash >= 0)
  15. {
  16. Name = directoryPath.Substring
    (indexLastSlash + 1);
  17. }
  18. else
  19. {
  20. Name = directoryPath;
  21. }
  22. }
  23. public string Name
  24. {
  25. get;
  26. private set;
  27. }
  28. public string Path
  29. {
  30. get;
  31. private set;
  32. }
  33. public IEnumerable<BindDirectory> 
    Directories
  34. {
  35. get
  36. {
  37. //延迟加载
  38. if (directories == null)
  39. {
  40. directories = new List
    <BindDirectory>();
  41. foreach (string d in Directory.
    GetDirectories(Path))
  42. {
  43. directories.Add(new 
    BindDirectory(d));
  44. }
  45. }
  46. return directories;
  47. }
  48. }
  49. List<BindDirectory> directories;
  50. }
  51. }

这个类所作的工作很简单,就是正规化目录路径,获取目录名称,以及延迟加载子目录(以提升性能)的列表,我们的界面也只要求它具有这些功能就行了.

WPF数据绑定第二步,创建一个数据提供类(DataProvider)

我们可以在Window的代码里设置界面的DataContext,ItemsSource等属性来让界面显示指定的数据,也可以构造一个专门提供数据的类,完全在界面(XAML)里指定,这里使用的是第二种方法:

 
 
 
  1. using System.Collections.Generic;
  2. using System.IO;
  3. namespace WpfApplication1
  4. {
  5. class BindDirectoryList : 
    List< BindDirectory>
  6. {
  7. public BindDirectoryList()
  8. {
  9. foreach (var drive in 
    DriveInfo.GetDrives())
  10. {
  11. Add(new BindDirectory(drive.
    RootDirectory.FullName));
  12. }
  13. }
  14. }
  15. }

这个类就更简单了,仅仅是在创建的时候加载所有的磁盘的根目录.

WPF数据绑定第三步,设计用户界面

只需要在Window中添加一个TreeView,然后修改几行代码,就能轻松地显示我们的数据了:

 
 
 
  1. < !--xml:sample这一行用来引入
    我们自己代码的命名空间-->
  2. < Window x:Class="WpfApp
    lication1.Window1"
  3. xmlns="http://schemas.
    microsoft.com/winfx/2006/
    xaml/presentation"
  4. xmlns:x="http://schemas.
    microsoft.com/winfx/2006/xaml"
  5. xmlns:sample="clr-namespace:
    WpfApplication1"
  6. Title="Window1" Height="300" 
    Width="300">
  7. < Window.Resources>
  8. < !--引入我们自己的数据提供对象-->
  9. < ObjectDataProvider x:Key="drives" 
    ObjectType="{x:Type sample:
    BindDirectoryList}" />
  10. < !--设置如何显示数据,以及如何获
    取下一级数据的列表-->
  11. < HierarchicalDataTemplate x:Key=
    "itemTemplate" DataType="{x:Type 
    sample:BindDirectory}" ItemsSource=
    "{Binding Directories}">
  12. < TextBlock Text="{Binding Name}" />
  13. < /HierarchicalDataTemplate>
  14. < /Window.Resources>
  15. < TreeView ItemsSource="{Binding 
    Source={StaticResource drives}}"
  16. ItemTemplate="{StaticResource 
    itemTemplate}" >
  17. < /TreeView>
  18. < /Window>

这里我们在XAML里定义了一个drives对象,它的类型为BindDirectoryList,创建时会自动加载磁盘的根目录;

我们在WPF数据绑定中还定义了一个针对BindDirectory类型的层次型数据模板itemsTemplate,指定了要获取此类型的数据的子数据需要通过Directories属性,并且告诉WPF用一个TextBlock来显示它的名称.

最后,我们设置一下TreeView的ItemsSource和ItemTemplate就完成工作了.

当前标题:WPF数据绑定在目录树构造中作用体现
分享地址:http://www.hantingmc.com/qtweb/news24/136624.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联