Как показать индекс строки для сетки данных инструментария wpf?

Я просто хочу добавить столбец индекса в набор инструментов wpf DataGrid, чтобы показать индекс строки для каждого данных в файле DataGrid. Как?

<dg:DataGrid ItemsSource="{Binding List}"                              
             SelectionMode="Extended"
             IsReadOnly="True"
             AutoGenerateColumns="False"
             HorizontalAlignment="Left">
    <dg:DataGrid.Columns>

        **<dg:DataGridTextColumn Header="Row Index"></dg:DataGridTextColumn>**
        <dg:DataGridTextColumn Header="Branch"
                               Binding="{Binding Branch.Id}"></dg:DataGridTextColumn>
        <dg:DataGridTextColumn Header="Count"
                               Binding="{Binding RequestCount}"></dg:DataGridTextColumn>
    </dg:DataGrid.Columns>
</dg:DataGrid>

person NetSide    schedule 11.01.2010    source источник


Ответы (3)


вы можете использовать мультипривязку и преобразователь для привязки к элементу в строке и родительской сетке данных. затем в конвертере вы ищете позицию строки в элементах сетки данных.

На этой странице загрузите образец WPFDatagridWithRowNumbers.zip.

Наслаждаться!

person Aran Mulholland    schedule 11.01.2010
comment
У меня проблема с открытием ссылки (sites.google). у вас есть другая ссылка на этот образец? - person NetSide; 20.01.2010
comment
я могу открыть его с помощью firefox на моем компьютере и моем Mac. можно ли вообще зайти на сайт? Это просто почтовый индекс, который доставляет вам горе? - person Aran Mulholland; 20.01.2010
comment
это было о сайте, но я исправил это. Спасибо. - person NetSide; 25.01.2010
comment
Это решение работает ТОЛЬКО, если у вас отключена виртуализация строк... к сожалению, для меня это не вариант. - person John Fairbanks; 17.06.2013
comment
@John, затем используйте модель представления, оберните свои элементы и дайте каждому свойство индекса. - person Aran Mulholland; 18.06.2013

У меня сейчас нет образца кода, но в соответствии с этот пост есть «событие LoadingRow, к которому вы можете прикрепиться. В этом событии вы можете каждый раз устанавливать заголовок на желаемое число на основе элемента в аргументах события».

Это единственный способ, который я мог найти, чтобы сделать это. Похоже, элегантного решения XAML не существует.

person John Myczek    schedule 11.01.2010
comment
Я использую mvvm, поэтому я ищу решение xaml для этой проблемы. Спасибо за ответ. - person NetSide; 12.01.2010
comment
Это самое простое и прямолинейное решение, и оно не конфликтует с MVVM (поскольку MVVM не означает вообще избегать кода программной части представления, а ограничивает его вещами, связанными с пользовательским интерфейсом... что и есть этот визуальный индекс за :) ). Просто поместите e.Row.Header = e.Row.GetIndex(); в обработчик событий LoadingRow — готово. - person Nicolas; 23.05.2019

Забудьте о мультибиндинге и конвертерах. Вы можете сделать это полностью в XAML.

Сначала привяжите свойство AlternationCount вашей сетки данных либо к свойству count вашей коллекции, либо к свойству Items.Count вашего DataGrid следующим образом:

<dg:DataGrid AlternationCount="{Binding List.Count}" />

Or:

<dg:DataGrid AlternationCount="{Binding Items.Count, RelativeSource={RelativeSource Self}" />

Либо должно работать.

Затем, предполагая, что вы используете DataGridTextColumn для крайнего левого столбца, вы делаете следующее в своем определении DataGrid.Columns:

<dg:DataGrid.Columns>
   <dg:DataGridTextColumn Binding="{Binding AlternationIndex, RelativeSource={RelativeSource AncestorType=DataGridRow}}"
</dg:DataGrid.Columns>

Если вы не хотите начинать с 0, вы можете добавить преобразователь к привязке индекса чередования, чтобы увеличить индекс.

person GrantA    schedule 14.11.2016