如何為TreeView定義三層模板並實現資料繫結

2022-09-15 07:18:09 字數 2508 閱讀 7446

一直以來都想對treeview定義多層模板,並實現資料繫結做乙個總結,今天在這裡做乙個概述,我們常用的兩層的treeview繫結的話,我們首先修改treeview的模板,這裡我們使用的是級聯的資料模板,又稱之為分層資料模板,這裡包含幾個重要的屬性意義:

datatype指定模板用於哪種資料型別

itemssource指定該類資料的子集,即下一層顯示那些資料

內容 指定資料如何顯示 繫結哪個屬性

在我們的例子中第一層模板使用的資料型別是local命名空間下的playlist類,itemssource指定該類資料的子集,即下一層顯示那些資料,在這裡指的是hierarchicaldata template.itemtemplate 中的textblock使用的資料來源型別。此處我們還定義了另外乙個類 playlistitem用來顯示第二層資料,即子集顯示的型別。這裡的item是我們定義的乙個 observablecollectionitem ,有了這個集合我們就能夠獲取到第二層的資料來源,這個是非常重要的。這個集合提供了add和remove以及clear等方法,由於該類實現了inotifypropertychanged介面,所以在刪除項、增加項或者移除項的時候,會通知ui同步更新資料來源,這個是非常重要的,在定義完模板之後,我們就需要將相應的資料新增到資料來源中,在主程式中我們將所有的playlist新增到乙個observablecollectionroot 中,最後我們通過 this.treeview.itemssource=root來實現資料的繫結,至於怎麼獲取資料源,這個我們可以是獲取多級資料夾分別繫結到該類的某乙個屬性上,或者是從資料庫中獲取資料然後再新增到資料來源中來實現資料的繫結。

下面再分別貼出兩個類的具體**,僅供參考:

playlist.cs  

using system;

using system.collections;

using system.collections.generic;

using system.linq;

using system.text;

using system.collections.objectmodel;

using system.componentmodel;

using system.windows.controls;

namespace earthsimulation

public string listname;

//observablecollection表示乙個動態資料集合,在新增項、移除項或重新整理整個列表時,此集合將提供通知。

private observablecollection_item = new observablecollection();

public observablecollectionitem

get

}public void additem(playlistitem item1)

public void removeitem(playlistitem olditem)

public string getlistname

set }}

}}

playlistitem.cs  

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace earthsimulation

//獲取資源的名稱

private string resourcename;

public string resourcename

get

}//儲存資源的路徑

public string directoryarray

public playlist list

public int parentindex

}}

以上是通過分層模板來定義兩層資料,下面介紹如何定義三層資料的資料模板,這裡可以參考msdn上的乙個例子:來進行定義,這裡是仿照該例子來定義的三層資料模板,這裡我們將該模板定義為資源,

在treeview中我們不需要進行相關的模板進行修改,但是在繫結資料來源的時候,我們需要將分層的資料繫結到該treeview中,this.allpolicecarlistview.itemssource = root,其中root中是我們新增的三層資料,這樣當我們繫結資料來源之後,會自動引用我們在資源中定義的三層資料模板,從而為treeview填充資料,這種情況我們在使用的時候需要特別注意,對於具體怎麼定義這些類,如何實現inotifypropertychange介面,這個同兩層的資料模板繫結時類似,具體參考上面的**;

總結:如果想定義更多層的資料,只需繼續新增分層模板即可,但是也是只能夠在資源中進行定義,不能在treeview.itemtemplate中定義。另外下面介紹乙個加減號的togglebutton,以及乙個比較使用的treeview樣式,具體如下:

三層 我眼中的三層結構

從行為型模式命令模式引發的對三層的思考。記得 大話設計模式 中對命令模式的講解。燒烤攤和燒烤店之間的區別。由於客戶和烤羊肉串老闆的 緊耦合 所以容易出錯,容易混亂,也容易挑剔。這其實就是 行為請求者 與 行為實現者 的緊耦合。對請求排隊或記錄請求日誌,以及支援可撤銷的操作等行為時,行為請求者 與 行...

成也三層,敗也三層

這重構版的機房的計畫早就開始,但開始的僅僅是計畫,卻遲遲沒有行動的意思,於是頻頻地徘徊著,迷茫著。這都過去三個星期了,每次的停滯不前我都有自己的理由,但是我應該從心底裡明白 成也三層,敗也三層 用三層對機房收費進行重構是乙個坎兒,這就是乙個對我們的的考驗,挺過去的就是通往下一站的乘客,沒過去應該就和...

三層架構 之三層擴充套件七層

哎,真心不想在這裡寫這篇部落格,本來三層到七層頂多了也就用兩天時間去分析,結果我用了將近四天,最後我都快崩潰了,還有好多問題都是同學幫我找出來的,真是很是汗顏吶!下面是我三層架構擴充套件成七層架構的uml包圖 之前看別人都是用的vb.net版,我就覺得剛學習了c 語言,就先用c 版吧,結果倒好,兩種...