wpf treeview
繫結到層次結構資料庫
首先在sql server
中建立下面的層次資料庫
instance
資料庫,包含兩個父子表
例項表i1
字段資料型別
描述i1_id
int例項id(
pk)i1_name
varchar(50)
例項名稱
子例項表i2
字段資料型別
描述i2_id
int子例項id(
pk)i1_id
int所屬例項id(
fk)i2_name
varchar(50)
子例項名稱
注意這裡要建立兩個表的外來鍵關係
使用visual studio 2008
建立乙個
wfp工程
,命名為
i12
使用data—>add new datasource
下的建立乙個新的連線,選擇
填寫好資料庫的連線資訊並測試連線
選擇資料表
選擇完成,這時,
visual studio
會自動生成幾千行的**。
instancedataset.designer.cs中。
由於這些自動生成的**是為
.net2.0
的windows form
所量身定做的。當時還沒有考慮的
wpf的情況。
wpf中要求的物件是要由無引數建構函式完成所有構造的。而
instancedataset
類是乙個
dataset
類的子類,雖然它含有無引數的建構函式,但是,必須通過相應的強型別表介面卡進行填充才能完成構造,因此如果直接在
xaml
中構造乙個
instancedataset
物件由於資料集是空的,所以
treeview
中什麼都不會有。
解決的方法是使用
objectdataprovider
物件,objectdataprovider
物件可以以方法或屬性的方式提供乙個物件,這樣我們可以構造乙個
instancedatasetprovider
類,使它的某個方法
createinst
返回乙個填充好的
instancedataset
,再將它作為
treeview
的datacontent。
其**如下:
namespace
i12
} }
對應的xaml檔案如下
<
windowx:
class
="i12.window1"
xmlns
=""xmlns:x
=""xmlns
:local
="clr-namespace:i12"
title
="window1"
height
="300"
width
="300">
<
window.resources
>
<
objectdataproviderx:
key="inst1"
objecttype
=""methodname
="createinst" />
<
datatemplatex:
key="tmp_i2" >
<
textblock
text
="" />
datatemplate
>
<
hierarchicaldatatemplatex:
key="tmp_i1"
itemssource
=""itemtemplate
="" >
<
textblock
text
="" />
hierarchicaldatatemplate
>
window.resources
>
<
grid
datacontext
="">
<
treeview
margin
="28,31,130,31"
name
="treeview1"
itemssource
=""itemtemplate
=""/>
grid
>
window
>
而使用objectdataprovider
的另乙個好處就是可以在設計時就看到繫結的效果。如下圖所示:
WPF TreeView遞迴非同步繫結
using system using system.collections.generic using system.linq using system.text using system.componentmodel using system.collections.objectmodel nam...
應用層到驅動層
1 應用層 vfs 驅動層 硬體層 2 應用層的程式要想跟底層的硬體打交道必須要有裝置檔案 在應用層通過open開啟乙個裝置檔案時,在vfs層會建立inode結構體和file結構體,前者是靜態的描述裝置的一些資訊 如 裝置號,節點指標,裝置型別以及cdev結構體 後者則會描述裝置型別的一些動態資訊 ...
繫結Enum到DropDownList控制項的方法
有時,需要將乙個列舉型別繫結到dropdownlist供使用者選擇,這主要是enum.getnames和enum.getvalues的使用。方法如下 dropdownlist.datasource enum.getnames typeof yourenumtype dropdownlist.data...