在WPF DataGrid RowHeader中显示运行编号

时间:2010-06-07 20:01:38

标签: wpf datagrid mvvm header row

我正在使用WPF与MVVM。

我如何绑定:

  • 一个数字列表
  • 或具有属性编号
  • 的clr对象列表
  • 或字符串列表

在我的ViewModel中指向WPF DataGrid的RowHeader?

2 个答案:

答案 0 :(得分:8)

我从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();
}

但是,我无法使行标题上的数字右对齐。将Horizo​​ntalAlignment =“Right”添加到TextBlock没有帮助。我还尝试将TextBlock包装在StackPanel中,并设置此属性,但它也不起作用。有什么想法吗?

答案 1 :(得分:0)

您可以采用此方法http://www.codeproject.com/KB/WPF/MVVM_DataGrid.aspx?msg=3241301

基本上你创建一个列表来处理你的编号,只要T的对象实现了ISequenceObject。

如果你想转向另一个方向,你可以看看处理LoadingRow事件,只需将1添加到已知的DataColumn即可。这不会破坏MVVM的概念,因为编号列不是业务逻辑的一部分,而是演示的一部分。

要使Numbered DataGrid可重用,您还可以从DataGrid继承并创建自己的Numbered DataGrid。