如何在ItemTemplate xaml中显示TreeViewItem的索引?

时间:2011-10-06 18:56:42

标签: c# wpf treeview

我有一个TreeView,它使用DataTemplate来自定义TreeView中包含的每个项目的外观。在DataTemplate中,我想在Treeview中显示相关项的索引。解决这个问题的最佳方法是什么?特定的{Binding Path =“”}是否允许我获取项目的索引?

我的TreeView:

 <TreeView Name="_myTreeView"
      ItemsSource="{Binding [SourceCollection]}" 
      ItemTemplate="{StaticResource x:ResourceKey=MyTemplate}"
 />

我的DataTemplate:

 <DataTemplate x:Key="MyTemplate">
      <Grid Margin="5,5,5,5">
          <Grid.RowDefinitions>
              <RowDefinition/>
              <RowDefinition/>
          </Grid.RowDefinitions>
          <TextBlock Grid.Row="0" Source="{Binding Path=IconPath}"/>
          <TextBlock Grid.Row="1" Text="{Binding Path=Caption}"/>
          <TextBlock Grid.Row="2" Text="{Binding Path=[SomePath]}"/>
        </Grid>
</DataTemplate>

其中 [SourceCollection] 是树从中提取数据的来源, [SomePath] 是我想用来显示索引的绑定路径树中的项目。如果我目前的方法是实现这一目标的一种不可取的方式,我完全可以采取不同的方法。

2 个答案:

答案 0 :(得分:2)

您可以在AlternationCount上将int.MaxValue设置为TreeView,并绑定到模板中的ItemsControl.AlternationIndex附加属性。

<TextBlock Grid.Row="2" Text="{Binding Path=ItemsControl.AlternationIndex}"/>

答案 1 :(得分:0)

我最终在SourceCollection中的项目中添加了一个新属性。这个新属性存储了我正在寻找的索引值。

此应用程序的要求已更改,因此简单的整数索引不足。添加新房产是最好的方式。在树上的每次更改操作后,索引都会更新。