我有一個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