やりたいこと
リストボックスのアイテムに、そのアイテム自身のインデックス(自分がコレクションの何番目か)を出したい。
結論
ItemsControl.AlternationIndex を使う。
下記のようにする。
MainWindow.xaml
<ListBox
ItemsSource="{Binding ListBoxData4}"
AlternationCount="10">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<StackPanel Margin="5">
<!-- やり方1 -->
<ContentControl >
<Binding Path="(ItemsControl.AlternationIndex)" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}"/>
</ContentControl>
<!-- やり方2 -->
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=(ItemsControl.AlternationIndex), StringFormat={}{0}}"/>
<!-- アイテムそのままを出す -->
<TextBlock Text="{Binding}" HorizontalAlignment="Center"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
注意点
- AlternationIndexは、ListBoxに追加されたアイテムを、AlternationCountに設定された数までカウントして、その数を超えるとまた0に戻る。多数のアイテムを追加する場合は、AlternationCountを十分大きい値にする必要がある。
参考
WPF・XAML: ItemsControl の各項目表示にインデックス値を使う
https://www.ruche-home.net/boyaki/2015-02-25/WPFXAMLI
How to use AlternationIndex in ItemsControls?
https://stackoverflow.com/questions/3567778/how-to-use-alternationindex-in-itemscontrols
WPF の ListBox で N 番目の要素にスタイルをあてる
http://var.blog.jp/archives/67337347.html
コード