У меня есть древовидная структура с флажками для каждого элемента с использованием DataTemplate.
<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>
В флажке события щелчка я пытаюсь выяснить выбранный индекс в связанном списке основного дерева. Самое близкое, что я получил, - это передача объекта TreeViewItem в CommandParameter, но я ничего не могу с ним поделать. Я смог родительский ItemsControl, используя:
ItemsControl parent = ItemsControl.ItemsControlFromItemContainer(selectedItem);
int s = parent.Items.IndexOf(selectedItem);
Но s = -1 здесь.
У меня также есть флажок на флажке, в котором находится базовый объект. Конечно, я могу найти в своем списке объект для этого списка, но кажется, что должен быть более простой способ найти индекс.