2012-09-18 130 views
0

我有一個WPF DataGrid(.NET框架4),它從myObject的數組中獲取它的ItemsSource。 myObject的一個列/變量是DateTime。有沒有辦法改變DataGrid行的繪圖事件,以便除了每個對象的DateTime以外,還可以在該列的單元格中顯示其他內容?使用手動DataGridTextColumn,DataGridTemplateColumn`等以編程方式更改WPF Datagrid單元格的內容


編輯使用AutoGeneratingColumn事件

+0

繪圖事件不是更改數據的正確時間。 – Paparazzi

+0

我不想更改myObject的數據。我想改變顯示內容。 – user1241727

+0

仍然沒有正確使用繪圖事件。 – Paparazzi

回答

0

設置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(); 
    } 
} 
+0

我已經有一個autogeneratecolumn事件的回調,以便更改列的標題,我不會擺脫它。我希望datagrid在datetime值以外的單元格中顯示其他內容,所以當我添加一行時,而不是列中的值爲01/01/0001,我希望它是一個字符串,表示「Immediatley」或whatnot基於在那裏顯示的時間 – user1241727

+0

爲什麼拒絕擺脫AutoGenerateColumns?而不是修改只是明確地設置它。 – Paparazzi

+0

如果我想讓它顯示某些行上的按鈕以及同一列中其他行上的文本,該怎麼辦? – user1241727

相關問題