Отобразить порядковый номер в WPF DataGrid RowHeader - PullRequest
2 голосов
/ 08 июня 2010

Я использую WPF с MVVM.

Как я могу связать:

  • список номеров
  • или список объектов clr с номером свойства
  • или список строк

в моей ViewModel для RowHeader WPF DataGrid?

Ответы [ 2 ]

8 голосов
/ 11 сентября 2010

Я нашел элегантное решение для этой проблемы из http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7d0cbdf2-dea3-4dd4-a570-08aa6c78d911. Вот резюме:

<tk:DataGrid x:Name="dg" LoadingRow="dg_LoadingRow" ItemsSource="{Binding}">
    <tk:DataGrid.RowHeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type tk:DataGridRow}}, Path=Header}"></TextBlock>
        </DataTemplate>
    </tk:DataGrid.RowHeaderTemplate>
</tk:DataGrid>

private void dg_LoadingRow(object sender, Microsoft.Windows.Controls.DataGridRowEventArgs e)
{
    e.Row.Header = (e.Row.GetIndex() + 1).ToString();
}

Однако я не смог выровнять число в заголовке строки по правому краю. Добавление HorizontalAlignment = "Right" в TextBlock не помогает. Я также попытался обернуть TextBlock внутри StackPanel и установить это свойство, но оно тоже не работает. Есть идеи?

0 голосов
/ 08 июня 2010

Вы можете использовать этот подход http://www.codeproject.com/KB/WPF/MVVM_DataGrid.aspx?msg=3241301

По сути, вы создаете список, который будет обрабатывать нумерацию для вас, пока объект T реализует ISequenceObject.

Если вы хотеличтобы пойти в другом направлении, вы можете посмотреть на обработку события LoadingRow и просто добавить 1 к известному DataColumn.Это не нарушило бы концепцию MVVM, так как нумерованный столбец не является частью бизнес-логики, но является частью презентации.

Чтобы сделать Numbered DataGrid многоразовым, вы также можете наследовать от DataGrid и создать свой собственный Numbered.DataGrid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...