3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【WPF】ListBoxのアイテムに、バインドしたコレクションのインデックスを出す

Posted at

やりたいこと

リストボックスのアイテムに、そのアイテム自身のインデックス(自分がコレクションの何番目か)を出したい。

結論

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>

こんな感じになる。
image.png

注意点

  • 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

コード

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?