我正在从列表中加载一个TreeView,并且用户有一个删除项目的按钮,它从列表中删除它没有问题,但是还有一个按钮用于在项目被删除后用列表更新TreeView删除,我没有问题将新项目添加到TreeView,但有没有办法在添加新项目之前清除TreeView中的所有项目,所以我在TreeView中没有重复项?我试过在互联网上的其他地方寻找答案,但无法找到它,我尝试过简单的事情:
treeView1.Items.Clear();
但它不起作用。
对不起,我在评论中提到了这一点,下面我很确定这条线确实清楚了,我只是没有在正确的地方使用它,谢谢你的答案。
答案 0 :(得分:41)
要清除树视图,请清除节点。
treeView1.Nodes.Clear();
答案 1 :(得分:3)
首先,在您的示例中,Items和Clear应该大写。也许那是唯一的问题。
其次,如果您通过设置其ItemsSource填充树,则不允许您手动添加和删除其Items集合中的项目。相反,您应该将源设置为ObservableCollection而不是List。然后树视图将自动更新以反映源集合中的更改
答案 2 :(得分:0)
treeView1.DataBind();
答案 3 :(得分:0)
在进行刷新时,我有一个递归方法来填充TreeView后清理它。我通过引用传递TreeNode,它将导致节点在TreeView中保持可见和可选,即使Clear从逻辑上将它们从节点列表中删除。当我更改方法以按值传递TreeNode时,它正确地允许我清除节点。以下示例中的ByRef必须更改为ByVal(对于VB.NET)。
Private Sub DisplayPackageSubTree()
trvEntries.Nodes.Clear()
trvEntries.SelectedNode = trvEntries.Nodes.Add("Node0", "Root Node", -1, -1)
DisplayFolderTree(_folderContents, trvEntries.Nodes(0))
trvEntries.ExpandAll()
trvEntries.SelectedNode = trvEntries.Nodes(0)
trvEntries.Refresh()
End Sub
Private Sub DisplayFolderTree(ByVal folderContents As SubFolder, ByRef folderNode As TreeNode)
For Each entry As SubEntry In folderContents.Contents
If TypeOf entry Is SubFolder Then
Dim newNode As TreeNode = folderNode.Nodes.Add(entry.Name, entry.Name, 0, 0)
DisplayFolderTree(entry, newNode)
ElseIf TypeOf entry Is SubDocument Then
folderNode.Nodes.Add(entry.Name, entry.Name, 1, 1)
End If
Next
End Sub