【发布时间】:2010-06-07 20:01:38
【问题描述】:
我正在使用带有 MVVM 的 WPF。
如何绑定:
- 数字列表
- 或具有属性编号的 clr 对象列表
- 或字符串列表
在我的 ViewModel 中到 WPF DataGrid 的 RowHeader ?
【问题讨论】:
标签: wpf datagrid mvvm header row
我正在使用带有 MVVM 的 WPF。
如何绑定:
在我的 ViewModel 中到 WPF DataGrid 的 RowHeader ?
【问题讨论】:
标签: wpf datagrid mvvm header row
我从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();
}
但是,我无法使行标题上的数字右对齐。将 HorizontalAlignment="Right" 添加到 TextBlock 没有帮助。我还尝试将 TextBlock 包装在 StackPanel 中,并设置此属性,但它也不起作用。有什么想法吗?
【讨论】:
您可以采用这种方法http://www.codeproject.com/KB/WPF/MVVM_DataGrid.aspx?msg=3241301
基本上,只要 T 的对象实现 ISequenceObject,您就是在创建一个将为您处理编号的列表。
如果您想换个方向,您可以考虑处理 LoadingRow 事件并简单地将 1 添加到已知 DataColumn。这不会破坏 MVVM 的概念,因为编号列不是业务逻辑的一部分,而是表示的一部分。
要使 Numbered DataGrid 可重用,您还可以从 DataGrid 继承并创建您自己的 Numbered DataGrid。
【讨论】: