清除TreeView

时间:2011-06-22 20:48:18

标签: c# wpf treeview

我正在从列表中加载一个TreeView,并且用户有一个删除项目的按钮,它从列表中删除它没有问题,但是还有一个按钮用于在项目被删除后用列表更新TreeView删除,我没有问题将新项目添加到TreeView,但有没有办法在添加新项目之前清除TreeView中的所有项目,所以我在TreeView中没有重复项?我试过在互联网上的其他地方寻找答案,但无法找到它,我尝试过简单的事情:

treeView1.Items.Clear();

但它不起作用。

对不起,我在评论中提到了这一点,下面我很确定这条线确实清楚了,我只是没有在正确的地方使用它,谢谢你的答案。

4 个答案:

答案 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