【问题标题】:How to show row index for wpf toolkit datagrid?如何显示 wpf 工具包数据网格的行索引?
【发布时间】:2011-01-03 17:06:05
【问题描述】:

我只想在 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>

【问题讨论】:

    标签: wpf datagrid wpfdatagrid wpftoolkit


    【解决方案1】:

    忘记多重绑定和转换器。您可以完全在 XAML 中完成此操作。

    首先,将数据网格的 AlternationCount 属性绑定到集合的 count 属性或 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 开始,您可以在交替索引绑定中添加一个转换器来增加索引。

    【讨论】:

      【解决方案2】:

      您可以使用多重绑定和转换器来绑定到行中的项目和父数据网格。然后在转换器中查找数据网格项中行的位置。

      this page 下载示例 WPFDatagridWithRowNumbers.zip

      享受吧!

      【讨论】:

      • 我无法打开链接 (sites.google)。你有这个示例的另一个链接吗?
      • 我可以在我的 pc 和 mac 上使用 firefox 打开它。你能到那个网站吗?只是拉链让你伤心吗?
      • 这是关于网站的,但我修复了它。谢谢。
      • 这个解决方案只有在你关闭了行虚拟化的情况下才有效......不幸的是,这对我来说不是一个选项
      • @John 然后使用视图模型,包装您的项目并为每个项目分配一个索引属性。
      【解决方案3】:

      我现在没有代码示例,但是根据this post,有一个“您可以附加到的 LoadingRow 事件。如果您每次都可以根据事件参数中的项目。”

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

      【讨论】:

      • 我正在使用 mvvm,这就是为什么我正在为这个问题寻找 xaml 解决方案。谢谢你的回答。
      • 这是最简单直接的解决方案,它不与 MVVM 冲突(因为 MVVM 并不意味着完全避免视图的代码隐藏,而是将其限制为 UI 相关的东西.. . 这就是这个视觉索引的用途:) )。只需将e.Row.Header = e.Row.GetIndex(); 放入LoadingRow 事件处理程序 - 完成。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 2010-12-19
      • 2010-12-13
      • 1970-01-01
      • 2010-11-26
      • 2010-12-02
      相关资源
      最近更新 更多