添加顯示和值成員屬性
擁有 DataSource 是實現復雜數據綁定的第一步,但該控件需要了解數據的哪些特定字段或屬性將用作顯示和值成員。Display 成員將用作樹節點的標題,而 Value 成員可通過節點的 Value 屬性進行訪問。這些屬性都是字符串,表示字段或屬性名,可以方便地添加到控件中:
Private m_ValueMember As String
Private m_DisplayMember As String
_
Public Property ValueMember() As String
Get
Return m_ValueMember
End Get
Set(ByVal Value As String)
m_ValueMember = Value
End Set
End Property
_
Public Property DisplayMember() As String
Get
Return m_DisplayMember
End Get
Set(ByVal Value As String)
m_DisplayMember = Value
End Set
End Property
在此 TreeVIEw 中,這些屬性將僅表示葉節點的 Display 和 Value 成員,每個分組級別的相應信息將在 AddGroup 方法中指定。
使用 CurrencyManager 對象
在前面探討的 DataSource 屬性中,創建了一個 CurrencyManager 類的實例,並存儲在類級別變量中。通過該對象訪問的 CurrencyManager 類是實現數據綁定的關鍵部分,因為它具有的屬性、方法和事件可實現以下功能:
檢索屬性/字段值
CurrencyManager 對象允許您通過它的 GetItemPropertIEs 方法從數據源的單個項中檢索屬性或字段值,如 DisplayMember 或 ValueMember 字段的值。然後使用 PropertyDescriptor 對象獲取特定列表項上的特定字段或屬性的值。下面的代碼片斷顯示了這些 PropertyDescriptor 對象的創建方法以及如何使用 GetValue 函數獲取基礎數據源中某一項的屬性值。請注意 CurrencyManager 對象的 List 屬性:通過它可以訪問該控件綁定到的 IList 實例:
Dim myNewLeafNode As TreeLeafNode
Dim currObject As Object
currObject = cm.List(currentListIndex)
If Me.DisplayMember <> "" AndAlso Me.ValueMember <> "" Then
' 添加葉節點?
Dim pdValue As System.ComponentModel.PropertyDescriptor
Dim pdDisplay As System.ComponentModel.PropertyDescriptor
pdValue = cm.GetItemPropertIEs()(Me.ValueMember)
pdDisplay = cm.GetItemPropertIEs()(Me.DisplayMember)
myNewLeafNode = _
New TreeLeafNode(CStr(pdDisplay.GetValue(currObject)), _
currObject, _
pdValue.GetValue(currObject), _
currentListIndex)
GetValue 在返回對象時忽略屬性的基本數據類型,因此在使用返回值前需要對其進行轉換。