Очистить TreeView - PullRequest
       1

Очистить TreeView

16 голосов
/ 23 июня 2011

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

treeView1.Items.Clear();

, но он не работает.

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

Ответы [ 4 ]

41 голосов
/ 22 марта 2013

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

treeView1.Nodes.Clear();
3 голосов
/ 23 июня 2011

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

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

0 голосов
/ 14 января 2016

У меня был рекурсивный метод для заполнения TreeView после его очистки при обновлении.Я передавал TreeNode по ссылке, и это заставляло бы узлы оставаться видимыми и выбираемыми в TreeView, даже если Clear логически удалил их из списка Nodes.Когда я изменил метод для передачи 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
0 голосов
/ 23 июня 2011

ты пробовал

treeView1.DataBind();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...