2009-09-09 52 views
0

我有一個Silverlight TreeView控件,當點擊特定節點時,它將動態填充。例如,我加載第一代(級別)節點,然後當用戶點擊其中一個節點時,我使用Selected事件來填充該節點的子節點等等。我從數據庫中發回一個bool值與每個節點值一起表示新節點是否有子節點。以編程方式在Silverlight TreeView上顯示展開箭頭

我想設置展開箭頭顯示在有新生節點的新節點前面,但問題在於它的子節點還沒有填充。我想也許將HasChild設置爲我的布爾值,但HasChild是隻讀的。任何建議將非常感激。

回答

1

只需添加空白樹視圖時,它將合攏以顯示箭頭。

但是,當用戶擴大,清除空白的孩子,並進行異步調用,以獲得真正的孩子。

在進行GetChildrenAsync調用時,將UserState設置爲父樹視圖或id。

當他們到達時,UserState應該是父樹treeviewitem或id,當你發現你剛剛設置它的父項,它的itemsource到e.Result。

+0

我想到了這個空白的孩子,並嘗試過之前。它對大多數人來說都很好,但是隨後一些數據表明具有特定名稱的特定節點(即4555667)已經存在,我得到了這個奇怪的錯誤。我運行了我的調試器並三重檢查了我的數據,但是我看不到它會被複制到哪裏。 – 2009-09-10 15:06:21

+0

這太糟糕了,我的工作真的很好。您是否確定在再次添加之前清除現有的孩子?你能說出哪些方法或組件是錯誤的根源嗎? – Paully 2009-09-11 15:38:23

+0

我有兩個填充節點的函數:一個是做初始填充,一個是做所有子序列的子節點。我的第一個功能將完美填充。在一個例子中,我有10個記錄,其中4個有孩子(空白的孩子)。當我運行填充子元素函數時,如果一個節點包含多個具有子節點的子節點,它會給我一個未處理的錯誤,說明一個節點已經以該名稱存在(我將所有具有節點ID的節點命名爲I已經證實沒有數據冗餘。)您想查看我的代碼嗎? – 2009-09-20 15:25:41

0

如果您熟悉依賴項屬性,您可以創建一個依賴屬性,該屬性可由您在代碼中設置,並且可以在xaml中設置爲可以綁定。

這將允許您使用ValueConverter來呈現箭頭的可見性。

+0

我試圖用你的建議的方法,但我得到了以下錯誤:

在Silverlight應用程序處理錯誤無法設置只讀屬性HasItems。在System.Windows.Controls.TreeViewItem.OnHasItemsPropertyChanged(等等,等等,等等..)

這裏是我曾經嘗試更新我的樹型視圖的依賴項屬性代碼:

樹型視圖TVI =新樹型視圖(){Header = x.UserName,Name = x.UserName}; tvi.SetValue(TreeViewItem.HasItemsProperty,true);

我可能錯過了一些東西。謝謝! – 2009-09-10 15:03:51

+0

我覺得HasItems只是一個反映物品的數量是否大於0.所以你不會直接設置它,而是確保它有項目:) – 2009-09-10 17:39:20

+0

我需要僞裝它,以便它認爲它有項目而實際上並沒有在當時填充物品。 – 2009-09-20 15:21:26