2009-09-08 10 views
2

J'ai des problèmes pour sélectionner le premier TreeViewItem dans un TreeView dans Silverlight. Le code suivant donne simplement une valeur null dans la méthode SelectFistItemInCatTreeView. Pourquoi? Des idées?Comment sélectionner un élément dans l'arborescence Silverlight?

<controls:TreeView x:Name="treeCategories" Grid.Column="1" Grid.Row="2" SelectedItemChanged="treeCategories_SelectedItemChanged"> 
    <controls:TreeView.ItemTemplate> 
    <common:HierarchicalDataTemplate ItemsSource="{Binding SubCats}"> 
     <StackPanel > 
     <TextBlock Text="{Binding Name}"></TextBlock> 
     </StackPanel> 
    </common:HierarchicalDataTemplate> 
    </controls:TreeView.ItemTemplate> 
</controls:TreeView> 



1   public MainPage() 
2   { 
3    InitializeComponent(); 
4  
5    DBService.DocTrackingServeceClient webService = new DockTracking.DBService.DocTrackingServeceClient(); 
6    webService.GetDocCategoriesCompleted += new EventHandler(webService_GetDocCategoriesCompleted); 
7    webService.GetDocCategoriesAsync(); 
8    treeCategories.Loaded += new RoutedEventHandler(treeCategories_Loaded); 
9   } 
10 
11   void webService_GetDocCategoriesCompleted(object sender, DockTracking.DBService.GetDocCategoriesCompletedEventArgs e) 
12   { 
13 
14    List cats = new List(); 
15    cats = GetCats(e.Result.ToList(), null); 
16    treeCategories.ItemsSource = cats; 
17   } 
18 
19   void treeCategories_Loaded(object sender, RoutedEventArgs e) 
20   { 
21    SelectFistItemInCatTreeView(); 
22   } 
23 
24   private void SelectFistItemInCatTreeView() 
25   { 
26    TreeViewItem item = treeCategories.ItemContainerGenerator.ContainerFromItem(treeCategories.Items[0]) as TreeViewItem; 
27    if (item != null) 
28    { 
29     item.IsSelected = true; 
30    } 
31   } 

Répondre

3

Appel UpdateLayout() avant d'obtenir le TreeViewItem est-ce que le truc:

private void SelectFistItemInCatTreeView() 
{ 

    treeCategories.UpdateLayout(); 

    TreeViewItem item = treeCategories.ItemContainerGenerator.ContainerFromItem(treeCategories.Items[0]) as TreeViewItem; 
    if (item != null) 
    { 
    item.IsSelected = true; 
    } 
} 
2

Il ressemble à la méthode ContainerFromItem est censé être passé le produit que vous lier à, plutôt qu'un simple tv.Items [0].

Je regarde ce qui suit:

1

Si vous avez des données hiérarchiques, cela ne fonctionnera que lors de la sélection d'éléments au niveau supérieur. Pour sélectionner des sous-éléments sous le niveau supérieur, vous devez développer et parcourir l'arborescence jusqu'à ce que TreeViewItem pour l'élément souhaité ait été créé.

See this page for TreeViewExtended

Sa classe TreeViewExtended a une méthode appelée SetSelectedItem qui fonctionne réellement!

+0

J'ai essayé la méthode SetSelectedItem, mais cela n'a pas fonctionné pour moi. Quoi qu'il en soit, l'aricle sur la treeview est génial, et m'a aidé dans d'autres situations. –

+0

Le lien ne fonctionne plus. Merci Microsoft pour avoir raté tous les liens ressources Silverlight. – Entrodus

Questions connexes