J'ai une vue arborescente avec des cases à cocher pour chaque élément utilisant un DataTemplate.Accès à l'index sélectionné dans WPF Treeview via un objet TreeViewItem
<TreeView ItemsSource="{Binding}">
<DataTemplate DataType="{x:Type local:MatchDataLeaf}">
<Grid Margin="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="240"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="60"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal">
<CheckBox x:Name="selectCheckBtn" Grid.Column="0" IsChecked="True" Click="select_Click"
Tag="{Binding}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}}"/>
<TextBlock Grid.Column="1" Margin="5,0,0,0" Text="{Binding Path=Name}" FontFamily="Arial" FontSize="12" FontWeight="Bold" Foreground="Black" VerticalAlignment="Center"/>
</StackPanel>
</Grid>
</DataTemplate>
En cas de clic de case à cocher, je suis en train de comprendre l'index sélectionné dans la liste binded de l'arbre principal. Le plus proche est de passer l'objet TreeViewItem dans le CommandParameter, mais je ne peux rien faire avec. J'ai été capable de la parent ItemsControl en utilisant:
Mais s = -1 ici. J'ai également la balise sur la case qui contient l'objet sous-jacent. Bien sûr, je peux faire une recherche sur ma liste pour l'objet, mais il semble juste qu'il doit y avoir un moyen plus simple de trouver l'index.
Merci. Le parent de sp est la grille, et son parent est null. – user350213
Essayez d'utiliser VisualTreeHelper.GetParent (grille). –
renvoie le ContentPresenter - Comment obtenez-vous le TreeViewItem de cela? – user350213