我有一个WPF DataGrid(.NET框架4),它从myObject的数组中获取它的ItemsSource。 myObject的一个列/变量是DateTime。有没有办法改变DataGrid行的绘图事件,以便除了每个对象的DateTime以外,还可以在该列的单元格中显示其他内容?使用手动DataGridTextColumn
,DataGridTemplateColumn`等以编程方式更改WPF Datagrid单元格的内容
编辑使用AutoGeneratingColumn
事件
我有一个WPF DataGrid(.NET框架4),它从myObject的数组中获取它的ItemsSource。 myObject的一个列/变量是DateTime。有没有办法改变DataGrid行的绘图事件,以便除了每个对象的DateTime以外,还可以在该列的单元格中显示其他内容?使用手动DataGridTextColumn
,DataGridTemplateColumn`等以编程方式更改WPF Datagrid单元格的内容
编辑使用AutoGeneratingColumn
事件
设置AutoGenerateColumns
为False,并定义列,可以通过添加IValueConverter
修改列的输出:
void MyGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
// check if the current column is the target
if (e.PropertyName == "MyDateproperty")
{
// assuming it's a Text-type column
var column = (e.Column as DataGridTextColumn);
if (column != null)
{
var binding = column.Binding as Binding;
if (binding != null)
{
// add a converter to the binding
binding.Converter = new StringFormatConverter();
}
}
}
}
现在,以通常的方式定义StringFormatConverter
,将日期/时间值转换为任何值:
public class StringFormatConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var col = (DateTime?)value;
return (col == null) ? null : col.Value.ToShortDateString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我已经有一个autogeneratecolumn事件的回调,以便更改列的标题,我不会摆脱它。我希望datagrid在datetime值以外的单元格中显示其他内容,所以当我添加一行时,而不是列中的值为01/01/0001,我希望它是一个字符串,表示“Immediatley”或whatnot基于在那里显示的时间 – user1241727
为什么拒绝摆脱AutoGenerateColumns?而不是修改只是明确地设置它。 – Paparazzi
如果我想让它显示某些行上的按钮以及同一列中其他行上的文本,该怎么办? – user1241727
绘图事件不是更改数据的正确时间。 – Paparazzi
我不想更改myObject的数据。我想改变显示内容。 – user1241727
仍然没有正确使用绘图事件。 – Paparazzi