Очистить TreeView
Я загружаю TreeView из списка, и у пользователя есть кнопка для удаления элемента, и он удаляет его из списка без проблем, но есть также кнопка для обновления TreeView со списком после того, как элементы были удалено, у меня нет проблем с добавлением новых элементов в TreeView, но есть ли способ очистить все элементы в TreeView до того, как я добавлю новые элементы, поэтому у меня нет дубликатов в TreeView? Я пробовал искать другие места в Интернете для ответа, но не могу найти его, я пробовал простые вещи вроде:
treeView1.Items.Clear();
но это не сработает.
Извините, я упомянул об этом на комментарии ниже, я уверен, что эта строка действительно очищает его, я просто не использую его в нужном месте, спасибо всем за ваши ответы.
Ответы
Ответ 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