2010-07-05 4 views
2

Comment obtenez-vous le niveau d'un treeviewitem dans WPF C#? Dans les formulaires Windows, il existe un membre .Level de la classe treeview mais il ne semble pas en avoir un pour WPF C#.Comment obtenez-vous le niveau d'un treeviewitem dans WPF C#?

+3

Voir http://stackoverflow.com/questions/437840/the-level-of-a-treeview-in-wpf –

Répondre

2

Créer un modèle de vue.

Un modèle de vue vous donne une plus grande flexibilité avec l'arborescence que vous pouvez atteindre sans elle. Faites-vous une faveur, ne marchez pas dans l'arbre visuel, Si un nœud parent n'est pas visible, il pourrait être virtualisé et votre personnage de niveau (ou de profondeur) aurait tort. Construire un modèle de vue qui enveloppe vos données et sait à quel niveau il est.

Consultez les réponses affichées ici.

answer link one (vous ajouteriez une autre propriété à votre modèle de vue - niveau)

treeview view model demo

+1

Cela semble assez vaste. Pendant que je travaille dessus, permettez-moi de vous demander si une opération plus simple est disponible sans construire un modèle de vue. Dans WPF, je peux obtenir quel élément de l'arbre sur lequel l'utilisateur a cliqué. Après cela, je peux utiliser le membre "items" pour obtenir une liste des enfants de cet item. Y a-t-il un moyen d'obtenir un lien vers le parent? Il y a une sorte de "hérité de" et "décédé de" membre de la classe treeviewitem. Comment puis-je utiliser cela? – xarzu

+0

jeter un oeil sur le lien sous votre question, il s'agit de marcher dans l'arbre visuel. Généralement, l'élément que vous recherchez sera le DataContext de TreeViewItem. –

1

Je l'ai fait avec un convertisseur parce que je voulais le faire avec <style>

<DataTrigger Binding="{Binding Parent, RelativeSource={RelativeSource Self}, Converter={StaticResource TreeViewItemConverter}}" Value="1"> 
     <Setter TargetName="Bd" Property="Background" Value="Yellow"/> 
</DataTrigger> 

Et la convertisseur

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if ((value as TreeView) != null)//level 1 
      return 0; 

     var item = (value as TreeViewItem); 
     if (item != null) // level 2 and 3 
      return (item.Parent as TreeViewItem)!=null ? 2 : 1; 
     return 0; 
    } 

Ceci est particulièrement utile pour le style multiniveau dans l'arborescence

Questions connexes