【问题标题】:Display a running number in the WPF DataGrid RowHeader在 WPF DataGrid RowHeader 中显示一个流水号
【发布时间】:2010-06-07 20:01:38
【问题描述】:

我正在使用带有 MVVM 的 WPF。

如何绑定:

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

在我的 ViewModel 中到 WPF DataGrid 的 RowHeader ?

【问题讨论】:

    标签: wpf datagrid mvvm header row


    【解决方案1】:

    我从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 中,并设置此属性,但它也不起作用。有什么想法吗?

    【讨论】:

      【解决方案2】:

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

      基本上,只要 T 的对象实现 ISequenceObject,您就是在创建一个将为您处理编号的列表。

      如果您想换个方向,您可以考虑处理 LoadingRow 事件并简单地将 1 添加到已知 DataColumn。这不会破坏 MVVM 的概念,因为编号列不是业务逻辑的一部分,而是表示的一部分。

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

      【讨论】:

      • 我忘了在这里列出的第四个要求: - 行标题不能显示在第一列中这会导致过滤、排序等问题
      猜你喜欢
      • 1970-01-01
      • 2011-06-07
      • 2011-06-15
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多