
We need a class converter
public class ItemPositionToIndexConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { ListViewItem lvItem = value as ListViewItem; int index = 0; if (lvItem != null) { ListView listView = ItemsControl.ItemsControlFromItemContainer(lvItem) as ListView; //нумерацию будем вести с единицы index = listView.ItemContainerGenerator.IndexFromContainer(lvItem) + 1; } return index; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
Given that this class is at the root of the project
<Window.Resources> <local:ItemPositionToIndexConverter x:Key="PositionConverter" /> </Window.Resources>
Then for ListView should be like this (note the <ListView.Resources> section and CellTemplate )
<ListView ItemsSource="{Binding Entries}" x:Name="listView" Height="193" Canvas.Left="29" Canvas.Top="30" Width="125"> <ListView.Resources> <DataTemplate x:Key="ColumnDataTemplate"> <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListViewItem}, Converter={StaticResource ResourceKey=PositionConverter}}" HorizontalAlignment="Center" /> </DataTemplate> </ListView.Resources> <ListView.View> <GridView> <GridViewColumn Header="н/п" CellTemplate="{StaticResource ResourceKey=ColumnDataTemplate}" /> <GridViewColumn Header="Имя" Width="70" DisplayMemberBinding="{Binding}" /> </GridView> </ListView.View>