轉帖|其它|編輯:郝浩|2011-08-10 14:26:04.000|閱讀 5631 次
概述:最近有部分朋友經常問我,WPF的TreeView控件,如何用MVVM來實現綁定和顯示?所以寫下了這篇WPF應用基礎篇---TreeView.
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
最近有部分朋友經常問我,WPF的TreeView控件,如何用MVVM來實現綁定和顯示?所以寫下了這篇WPF應用基礎篇---TreeView.
1.介紹
圖 1-1(案例結構圖)
整個Demo分為兩部分:左邊是功能菜單,右邊是顯示具體內容,可以參考圖1-1。
基礎數據:為了實現一下案例功能,我建立了一個SmlAnt.DataLibrary的數據類庫,專門提供原始基本類型和基本數據。下面是具體代碼:
實體類:
數據工廠:
案例一, 主要為大家介紹如何創建一個無限級的樹,其實說簡單點就是采用HierarchicalDataTemplate 作為樹模板,然后通過Binding把數據綁定到樹上。因為模板是HierarchicalDataTemplate這個模板,這里就不詳細講解,如果了 解多點可以到MSDN,所以會無限級別的增加,只要數據結構上能支持,數據有多少級別,View中顯示的樹也會對應有多少級別。而如果采用的是DataTemplate的話,則只能有一層的數據。
效果圖如下:
圖 1-2(無限級別樹)
View(XAML)代碼 代碼1-3:
ViewModel代碼:
案例二, 主要給大家講解的是,如何采用DataTmeplateSelector通過重寫SelectTemplate方法來實現的。來控制顯示樣式、右鍵菜單等 功能。這里主要講的是,不同服務器之間顯示不一樣,而且連快捷菜單也對應不一樣。這里有個特別說明的是:因為功能顯示的需求,這里把集線器定義為沒有子設 備的模板。還有另外一個功能就是當我按下重啟的時候,斷開按鈕就不能使用。這里用到的是Command。園里前輩們寫了很多這方面的文章,我這里就不對 ICommand進行詳細討論。
效果圖:圖1-1
快捷菜單(如下圖):
圖 1-3(路由器快捷菜單) 圖 1-4(交換機快捷菜單) 圖1-5(集線器快捷菜單)
快捷菜單代碼:
TreeView模板代碼:
DataTemplateSelector代碼:
ViewModel代碼:
案例三,主要跟大家分享的是,如何在TreeView上實現三態樹的功能。具體什么是三態樹的話我在這里就不多說了。以下是案例三的具體結構圖和代碼:
結構圖:
圖 1-6(三態樹)
代碼:具體代碼實現在上面的實體類代碼的 IDevice中實現。請參考上面代碼。
2.個人觀點
很多朋友都抱怨說WPF的TreeView是一個很麻煩的東西,而且不好用。這點我持反對的意見,每一種新東西,在我們還不熟悉的時候,是挺麻煩的。但是 WPF--TreeView較WinForm--Tree來說,WPF提供一個強大的模板功能,能讓我們根據自己的需要,靈活地更換模板。如果在做 WinForm開發的時候,我想實現一棵樹上保存N種數據類型的數據,而且根據不同的類型,在節點上顯示不一樣的狀態和樣式,也許你會花很多的時間來重寫 Tree的控件,而WPF提供了一個模板功能,而且具體的模板是我們自己來實現的。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園