Возможно ли узнать индекс текущего элемента в ItemsControl?WPF ItemsControl текущий индекс ListItem в ItemsSource
EDIT Это работает!
<Window.Resources>
<x:Array Type="{x:Type sys:String}" x:Key="MyArray">
<sys:String>One</sys:String>
<sys:String>Two</sys:String>
<sys:String>Three</sys:String>
</x:Array>
</Window.Resources>
<ItemsControl ItemsSource="{StaticResource MyArray}" AlternationCount="100">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Margin="10">
<!-- one -->
<TextBlock Text="{Binding Path=.,
StringFormat={}Value is {0}}" />
<!-- two -->
<TextBlock Text="{Binding Path=(ItemsControl.AlternationIndex),
RelativeSource={RelativeSource TemplatedParent},
FallbackValue=FAIL,
StringFormat={}Index is {0}}" />
<!-- three -->
<TextBlock Text="{Binding Path=Items.Count,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ItemsControl}},
StringFormat={}Total is {0}}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Это выглядит следующим образом:
Одним из способов было бы создать собственный IValueConverter и передать вещи свойство в качестве параметра, а затем получить индекс, глядя на коллекцию, хотя это не очень эффективно. – eulerfx
Это тоже не является надежным. Что делать, если он фильтруется или сортируется с помощью CollectionViewSource? Умный, признаюсь, но есть лучшие способы. –