我有一个树视图在我通过WCF方法动态构建的SL 4应用程序中。树视图由文件夹和文档组成。当需要添加批量文档时,我需要能够重建树。清除层次结构的silverlight树视图
如何清除SL树视图中的所有项目?并且不要说TreeView.Items.Clear()
,因为这不起作用。也不可能使用foreach
循环来移除所有项目及其子项。我说文章here,但在任何地方都看不到TreeView.Children.Copy
或TreeView.Items.Copy
。这是我试过的最后一件事,而且我不知所措...
请让我知道如果你知道一种方法来完成这件事......谢谢!
Private Sub NewDocumentTree_Received(ByVal sender As Object, ByVal e As GetDocumentTreeCompletedEventArgs)
Me.ThisDocTreeView = e.Result
ClearTree()
PopulateDocTreeView()
End Sub
Private Sub ClearTree()
Dim tempTree As New TreeView()
tempTree = CopyTreeViewToNewObject(Me.docTreeView)
For Each tvi As TreeViewItem In tempTree.Items
For Each sub_tvi As TreeViewItem In tvi.Items
For Each d_tvi As TreeViewItem In sub_tvi.Items
RemoveTreeViewSubItems(d_tvi)
Next
RemoveTreeViewSubItems(sub_tvi)
Next
RemoveTreeViewSubItems(tvi)
Next
tempTree.UpdateLayout()
Me.docTreeView = tempTree
Me.docTreeView.UpdateLayout()
End Sub
Private Sub RemoveTreeViewSubItems(ByVal tvi As TreeViewItem)
For Each sub_tvi As TreeViewItem In tvi.Items
tvi.Items.Remove(sub_tvi)
tvi.UpdateLayout()
Next
End Sub
Private Function CopyTreeViewToNewObject(ByVal treeview As TreeView) As TreeView
Dim newTree As New TreeView()
For Each Parent As TreeViewItem In treeview.Items
newTree.Items.Add(GetTreeViewItemAndChildren(Parent))
Next
Return newTree
End Function
Private Function GetTreeViewItemAndChildren(ByVal treeViewItem As TreeViewItem)
Dim ParentalItem As New TreeViewItem
ParentalItem = treeViewItem
For Each child As TreeViewItem In treeViewItem.Items
Dim firstChild As New TreeViewItem
firstChild = child
For Each subChild As TreeViewItem In child.Items
Dim secondChild As New TreeViewItem
secondChild = child
firstChild.Items.Add(secondChild)
Next
ParentalItem.Items.Add(firstChild)
Next
Return ParentalItem
End Function
UPDATE:下面是从一个批量更新到树的我的WCF服务,并且构建树视图中的主方法接收通知的方法。
Private Sub NewDocumentTree_Received(ByVal sender As Object, ByVal e As GetDocumentTreeCompletedEventArgs)
Me.ThisDocTreeView = e.Result
Me.docTreeView.Items.Clear()
Me.docTreeView.UpdateLayout()
PopulateDocTreeView()
End Sub
Private Sub PopulateDocTreeView()
'ensure all items are clear
Me.docTreeView.Items.Clear()
'loop through root folder to extract parent "user" folders, and examine sub folders
For Each folder As PortalOnline.PortalDocRootFolder In ThisDocTreeView.RootFolders
'get this users folder as a tree view items
Dim parent As TreeViewItem = GetParentTreeViewFolder(folder)
'define a new list of category folders based on this users documents
Dim catFolders As List(Of TreeViewItem) = GetCategoryFolderList(folder)
'loop through the subfolders of the users parent folder for document and get each document folder
'as a new tree view item
For Each child As PortalOnline.PortalDocInfo In folder.SubFolders
'define the document tree view item
Dim childItem As TreeViewItem = GetDocumentTreeItem(child, folder)
'loop through the category folders, and add the document tree view item to the appropriate folder
For Each categoryfolder As TreeViewItem In catFolders
Dim childMeta As DocTreeViewItem = childItem.Tag
'if the category tree veiw item head matches the document category of the document tree view item
'then add the document tree view item into that category folder
If categoryfolder.Header = childMeta.DocumentCategory Then
categoryfolder.Items.Add(childItem)
End If
Next
Next
'add all category folders to the users parent folder
For Each subfolder As TreeViewItem In catFolders
parent.Items.Add(subfolder)
Next
'add the users parent folder to the tree view
docTreeView.Items.Add(parent)
Next
End Sub
在页面加载时,和NewDocumentTree_Received方法时,WCF发布和更新被称为树形视图显然是被填充。
在实例中的错误: “具有相同键的项目已alread增加了”
它告诉我的树没有被清除和更新,否则树就不会在第一填充放置...希望帮助澄清情况。
注意* PopulateTreeView()方法以Me.docTreeView.Items.Clear()开始。 – wakurth 2012-02-14 20:24:21
您能解释为什么'treeView.Items.Clear()'不起作用吗?它会给出错误,不清楚所有项目,或者是什么?我进行了一次快速测试,似乎对我有用。 – 2012-02-14 22:17:53
当然..当我调用treeView.Items.Clear()绝对没有任何反应。我也尝试过treeView.Items.UpdateLayout()之后...仍然没有。这很简单。 – wakurth 2012-02-14 22:38:14