在DataGrid中将ViewModel成员的索引号添加为行号

时间:2014-01-07 09:09:19

标签: c# wpf mvvm datagrid rowcount

截至目前,我正在使用以下代码调用我的转换器为我做的事情,把我需要的行号。

<DataGridTextColumn Header="NO" Width="22" IsReadOnly="True" x:Name="rowNumber">
                    <DataGridTextColumn.HeaderStyle>
                        <Style TargetType="{x:Type DataGridColumnHeader}">
                            <Setter Property="FontSize" Value="10" />
                            <Setter Property="Margin" Value="0"/>
                        </Style>
                    </DataGridTextColumn.HeaderStyle>
                    <DataGridTextColumn.Binding>
                        <MultiBinding Converter="{StaticResource rowNumberConverter}">
                            <Binding />
                            <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}" />
                        </MultiBinding>
                    </DataGridTextColumn.Binding>
                </DataGridTextColumn>

转换器:

class RowNumberConverter : IMultiValueConverter
    {
        #region IMultiValueConverter Members

        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {

            //get the grid and the item
            Object item = values[0];
            DataGrid grid = values[1] as DataGrid;

            int index = grid.Items.IndexOf(item) + 1 ;

            return index.ToString().PadLeft(2, '0');
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion
    }

然而,这将在我们的新要求,分页中失败。此转换器当然不会继续计数,因为它只引用DataGrid中的行。

有人能指出如何在下一页继续进行行计数吗? 坚持清理MVVM模式是必要的。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为视图模型只是提供所有数据的元素。如果需要显示项目编号,则只需将另一个属性添加到正在显示的元素中。

这样做可以使用您想要的任何值填充数字,是否有一个连续序列中的数字,或者您是否有更复杂的编号系统。