Подтвердить что ты не робот

Очистить TreeView

Я загружаю TreeView из списка, и у пользователя есть кнопка для удаления элемента, и он удаляет его из списка без проблем, но есть также кнопка для обновления TreeView со списком после того, как элементы были удалено, у меня нет проблем с добавлением новых элементов в TreeView, но есть ли способ очистить все элементы в TreeView до того, как я добавлю новые элементы, поэтому у меня нет дубликатов в TreeView? Я пробовал искать другие места в Интернете для ответа, но не могу найти его, я пробовал простые вещи вроде:

treeView1.Items.Clear();

но это не сработает.

Извините, я упомянул об этом на комментарии ниже, я уверен, что эта строка действительно очищает его, я просто не использую его в нужном месте, спасибо всем за ваши ответы.

4b9b3361

Ответ 1

Прежде всего, элементы и Clear должны быть капитализированы в вашем примере. Возможно, это единственная проблема.

Во-вторых, если вы заполняете дерево, установив его ItemsSource, вам не разрешается добавлять и удалять элементы из коллекции Items вручную. Вместо этого вы должны сделать источник ObservableCollection вместо List. Затем treeview автоматически обновит себя, чтобы отразить изменения в исходной коллекции

Ответ 2

Чтобы очистить древовидную структуру, вы очищаете узлы.

treeView1.Nodes.Clear();

Ответ 3

Вы пробовали

treeView1.DataBind();

Ответ 4

У меня был рекурсивный метод заполнения 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