Wpf 自定义DataGrid控件中自动生成的列
在阅读了关于如何使用的优秀文章后,我遇到了一个问题 在尝试自定义Wpf 自定义DataGrid控件中自动生成的列,wpf,wpf-controls,wpfdatagrid,Wpf,Wpf Controls,Wpfdatagrid,在阅读了关于如何使用的优秀文章后,我遇到了一个问题 在尝试自定义DataGrid控件中自动生成的列时,我想做一些简单的事情,比如确保所有数字列值都正确对齐。为此,我创建了一个DataTemplate,如下所示: <DataGrid x:Name="MyGrid" AutoGeneratingColumn="MyGrid_AutoGeneratingColumn"> <DataGrid.Resources> <DataTemplate x:Key="Int
DataGrid
控件中自动生成的列时,我想做一些简单的事情,比如确保所有数字列值都正确对齐。为此,我创建了一个DataTemplate
,如下所示:
<DataGrid x:Name="MyGrid" AutoGeneratingColumn="MyGrid_AutoGeneratingColumn">
<DataGrid.Resources>
<DataTemplate x:Key="IntegerTemplate">
<TextBlock Text="{Binding}" HorizontalAlignment="Right"/>
</DataTemplate>
</DataGrid.Resources>
</DataGrid>
问题是TextBlock
的Text
列的值没有显示所需的结果。我看到的不是每个单元格中的右对齐值,这些单元格的列将此DataTemplate
作为其CellTemplate
,而是:
通过将属性Text
设置为“{binding}”
来使用空绑定语法显然是不正确的。设置基于路径的绑定不会产生所需的结果。也就是说,如果我使用以下内容设置(硬编码数据路径)绑定:
<DataGrid.Resources>
<DataTemplate x:Key="IntegerTemplate">
<!-- Binding hard set to ProductId -->
<TextBlock Text="{Binding ProductId}" HorizontalAlignment="Right"/>
</DataTemplate>
</DataGrid.Resources>
那么一切都很好,但是我的通用DataTemplate
不再是通用的。它不能对所有整数列重复使用,而只能用于ProductId
列,因为绑定固定到该特定数据项的值:
我应该使用什么样的正确绑定,以便泛型
DataTemplate
实际使用与其关联的列的相应ItemSource
属性中的任何值。在DataGrid上下文中使用TemplateColumn时,通常还必须使用ValueConverter
此ValueConverter将ViewModels对象中的数据(这实际上是您希望使用TemplateColumn而不是普通TextColumn的原因)转换为可表示的字符串形式
您是否有这样的转换器,或者在ViewModels对象中提供了ToString()方法?如果不试试,也许会有帮助 我相信风格会解决你的问题
private void MyGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (/*This is a column I want to change*/)
{
DataGridColumn column = e.Column;
column.CellStyle = MyGrid.FindResource("IntegerTemplate") as Style;
}
}
在XAML中,您可以编写
<Style TargetType="DataGridCell" x:Key="IntegerTemplate">
<Setter Property="FontWeight" Value="Bold"></Setter>
</Style>
适用于“我应该使用什么样的正确绑定,以便泛型DataTemplate实际使用与其关联的列的相应ItemSource属性中的任何值”的用户 请参阅此链接中王杰的答案: 重要的一点是重写System.Windows.FrameworkElement GenerateElement函数,以便它可以通过编程设置绑定以使用列名
希望这能有所帮助。@Michael Goldshteyn:我也有同样的问题,你找到解决办法了吗?+1我就是这么做的。我使用
样式
而不是数据模板
<Style TargetType="DataGridCell" x:Key="IntegerTemplate">
<Setter Property="FontWeight" Value="Bold"></Setter>
</Style>