成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WPF數據綁定在目錄樹構造中作用體現

開發 開發工具
當我們使用WPF數據綁定創建一個目錄樹的時候,可以分為三步實現,分別為:定義要綁定的數據類型;創建一個數據提供類;設計用戶界面。

WPF開發工具的使用,為開發人員帶來了非常大的作用。開發人員在實際開發編程中,可以輕松靈活的實現與MAC相媲美的圖形界面。#t#

如果使用了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. }  

 

這個類所作的工作很簡單,就是正規化目錄路徑,獲取目錄名稱,以及延遲加載子目錄(以提升性能)的列表,我們的界面也只要求它具有這些功能就行了.

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. }  

 

這個類就更簡單了,僅僅是在創建的時候加載所有的磁盤的根目錄.

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就完成工作了.

責任編輯:曹凱 來源: 博客園
相關推薦

2009-12-24 16:57:53

WPF密碼

2009-12-29 14:00:02

WPF Dispatc

2023-10-07 11:04:58

WPF數據UI

2009-12-24 17:52:05

WPF觸發器

2009-12-25 16:40:49

WPF優勢

2009-12-29 14:58:31

WPF優點

2009-12-24 11:15:59

WPF數據綁定

2021-02-11 08:27:28

數據

2009-12-23 15:16:52

WPF數據綁定

2010-02-23 16:15:24

WCF Endpoin

2009-12-28 16:45:31

WPF窗體

2009-12-25 15:29:12

WPF缺陷

2009-12-23 15:57:40

WPF傳遞事件

2011-03-30 09:13:13

靜態類Windows Pho

2009-12-04 17:31:32

PHP編碼轉換

2010-01-14 10:35:34

VB.NET指針

2009-11-25 17:54:47

PHP數組函數

2010-02-02 13:15:00

C++ lambda函

2010-02-25 17:22:39

WCF服務行為

2010-03-01 17:52:03

WCF選擇綁定
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费视频在线观看 | 欧美日韩手机在线观看 | 欧美一区二区三区在线观看 | 欧美黄色一区 | 亚洲国产成人精品一区二区 | 国产激情在线看 | 精品三区 | 日韩一区二区三区视频 | 一区二区三区四区在线 | 亚洲一区二区视频 | 综合激情网 | 精品久久久久久亚洲国产800 | 亚洲影音先锋 | 免费精品 | 91精品国产91久久综合桃花 | 国产激情亚洲 | 在线日韩av电影 | 91精品国产麻豆 | 国产免费看 | 操亚洲| 日韩中文字幕第一页 | 操久久 | 亚洲欧美中文日韩在线v日本 | 夜夜夜久久久 | 日本不卡视频在线播放 | 国产精品美女久久久久久免费 | 亚洲精品一区二区三区蜜桃久 | 一级黄a视频 | 蜜桃精品在线 | 亚洲国产网址 | 欧美日韩不卡合集视频 | 精品久久久网站 | 日韩有码一区 | 日本久久精品视频 | 亚洲视频免费在线 | 色婷婷综合成人av | 国产乱码精品一区二区三区中文 | 人妖av | 99视频精品| 久久精品av | 男人天堂视频在线观看 |