【发布时间】:2010-11-15 23:52:37
【问题描述】:
我有一个使用 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>
在复选框单击事件中,我试图找出主树的绑定列表中的选定索引。我得到的最接近的是在 CommandParameter 中传递 TreeViewItem 对象,但我不能用它做任何事情。我能够使用父 ItemsControl:
ItemsControl parent = ItemsControl.ItemsControlFromItemContainer(selectedItem);
int s = parent.Items.IndexOf(selectedItem);
但这里 s = -1。
我在复选框上也有标签,其中包含底层对象。当然,我可以在我的列表中查找对象,但似乎必须有一种更简单的方法来查找索引。
【问题讨论】: