2011-12-20 13 views
6

Czy istnieje prosty sposób, aby ustawić SelectedItem TreeView na wartość null lub równoważną? Ponadto muszę to zrobić w języku C#, a nie w XAML.Usuń SelectedItem z TreeView

poważaniem,

Gabriel

+0

Co dokładnie chcesz zrobić? Dlaczego musisz null SelectedItem? –

+0

Myślę, że po prostu chce wyczyścić zaznaczenie, może w zależności od wartości innego pola, że ​​użytkownik musi ponownie wybrać węzeł widoku drzewa, więc Karl dał odpowiedź –

Odpowiedz

6

Nie wiem, co masz na myśli

Jeśli chcesz usunąć element, użyj tego:

treeView1.Items.Remove(treeView1.SelectedItem); 

Jeśli chcesz usunąć zaznaczenie z widoku drzewa użyj:

((TreeViewItem)treeView1.SelectedItem).IsSelected = false; 
+0

'SelectedItem' jest' obiektem', więc musisz go rzucić. – Ray

+0

oh, przepraszam, musisz rzucić go do TreeViewItem - editet – Karl

+2

Co zrobisz, jeśli TreeView jest powiązany z danymi? –

3

Chcesz usunąć zaznaczenie?

Myślę, że chcesz coś takiego:

((TreeViewItem)tv.SelectedItem).IsSelected = false; 
7

Wszystkie wcześniejsze odpowiedzi będą pomocne podczas budowania TreeView jawnie przy użyciu TreeViewItem (y). Jeśli potrzebujesz rozwiązania, aby usunąć zaznaczenie podczas korzystania z ItemsSource, użyj następującego kodu:

private static TreeViewItem FindTreeViewSelectedItemContainer(ItemsControl root, object selection) 
{ 
    var item = root.ItemContainerGenerator.ContainerFromItem(selection) as TreeViewItem; 
    if (item == null) 
    { 
     foreach (var subItem in root.Items) 
     { 
      item = FindTreeViewSelectedItemContainer((TreeViewItem)root.ItemContainerGenerator.ContainerFromItem(subItem), selection); 
      if (item != null) 
      { 
       break; 
      } 
     } 
    } 

    return item; 
} 

// Example: 
private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    if (TV.SelectedItem != null) 
    { 
     var container = FindTreeViewSelectedItemContainer(TV, TV.SelectedItem); 
     if (container != null) 
     { 
      container.IsSelected = false; 
     } 
    } 
}