Доступ к выбранному индексу WPF Treeview через объект TreeViewItem - PullRequest
0 голосов
/ 16 ноября 2010

У меня есть древовидная структура с флажками для каждого элемента с использованием 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 здесь.

У меня также есть флажок на флажке, в котором находится базовый объект. Конечно, я могу найти в своем списке объект для этого списка, но кажется, что должен быть более простой способ найти индекс.

1 Ответ

0 голосов
/ 16 ноября 2010

Элемент управления ItemsControl, который вы выбираете, может быть StackPanel или Grid. Вы должны иметь возможность получить доступ к флажку через отправителя события и перейти к TreeViewItem и TreeView и использовать IndexOf.

 private void CheckBox_Click(object sender, RoutedEventArgs e)
 {
        CheckBox cb = (CheckBox)sender;
        StackPanel sp = (StackPanel)cb.Parent;
        Grid g = (Grid)sp.Parent;
        ContentPresenter cp = (ContentPresenter)VisualTreeHelper.GetParent(g);
        IList l = (IList)myTreeView.ItemsSource;
        object o = cp.Content;
        MessageBox.Show(l.IndexOf(o).ToString());
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...