如何在 WPF 工具箱数据表格中显示行索引?

4
我想在wpf工具包的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>
3个回答

4
我现在没有代码示例,但根据这篇文章中的说法,有“LoadingRow”事件可以附加。在该事件中,您可以基于事件参数中的项目设置每次所需的标题编号。

这是我找到的唯一方法。似乎没有优雅的XAML解决方案。


1
我正在使用MVVM,所以我正在寻找XAML解决方案来解决这个问题。谢谢回答。 - NetSide
这是最简单和直接的解决方案,它不会与MVVM冲突(因为MVVM并不意味着完全避免视图的代码后台,而是限制它在UI相关的事情上...这就是这个可视索引的作用 :))。只需将 e.Row.Header = e.Row.GetIndex(); 放在 LoadingRow 事件处理程序中即可 - 完成。 - Nicolas

4
您可以使用多绑定和转换器来绑定行中的项目和父数据表格。然后在转换器中,您可以查找数据网格项中行的位置。
此页面上下载WPFDatagridWithRowNumbers.zip示例。
祝使用愉快!

我无法打开链接(sites.google),这个例子有另外一个链接吗? - NetSide
我可以在我的电脑和 Mac 上使用 Firefox 打开它。你能进入这个网站吗?是只有 zip 文件让你苦恼吗? - Aran Mulholland
这是关于网站的问题,但我已经解决了。谢谢。 - NetSide
此解决方案仅在关闭了行虚拟化时才有效……不幸的是,这对我来说不是一个选项。 - John Fairbanks
@John,然后使用视图模型,包装您的项目并为每个项目添加一个索引属性。 - Aran Mulholland

3

忘记使用multibinding和转换器。您可以完全在XAML中完成此操作。

首先,将数据网格的AlternationCount属性绑定到您的集合的计数属性或DataGrid的Items.Count属性,方法如下:

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

或者:

<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开始,您可以将转换器添加到您的变化索引绑定中以增加索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接