2015-06-23 88 views
1

我有一個DataGrid綁定在一個簡單的ObservableCollection對象與一些枚舉和字符串。 (需要5個枚舉和2個字符串)。現在,這些枚舉中的兩個(它們是相同的類型)需要使用它們的描述符來顯示在組合框中。但我不知道如何告訴各個列使用枚舉的描述。使用DataGridComboBox中的枚舉描述自動生成DataGrid列

這是我的數據網格

<DataGrid x:Name="dataGrid" ItemsSource="{Binding StartConditions}" CanUserReorderColumns="False" CanUserSortColumns="False" 
      AutoGenerateColumns="True" CanUserResizeRows="False" CanUserAddRows="False" CellStyle="{StaticResource DataGridCellStyle}" 
       SelectedItem="{Binding SelectedStartCondition}"> 
</DataGrid> 

這是我綁定的描述枚舉。

enum Size 
    { 
    [Description("8-Bit")] 
    EightBit, 
    [Description("16-Bit")] 
    SixteenBit, 
    Bit0, 
    Bit1, 
    Bit2, 
    Bit3, 
    Bit4, 
    Bit5, 
    Bit6, 
    Bit7, 
    Lower4, 
    Upper4 
    } 

這就是我的DataGrid的外觀。

enter image description here

誰願意需要說明的兩列尺寸1至size2。 這些列是自動生成的,我只是無法弄清楚如何使用枚舉描述。

+0

您正在使用哪種.NET Framework版本? – Herdo

+0

@Herdo我正在使用4.5 –

回答

0

你想達到什麼是可能的,但有點棘手,並且在性能方面不太明智。您將修改列生成過程以顯示正確的文本。

首先的,重視AutoGeneratingColumn事件您DataGrid的:

<DataGrid x:Name="dataGrid" 
      ... 
      AutoGeneratingColumn="dataGrid_AutoGeneratingColumn" /> 
</DataGrid> 

在此處理程序,您可以修改列:

void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    // e.Column contains the generated column 
} 

其次,您可以訪問e.Column財產並應用DataTemplate。 然後,DataTemplate將使用轉換器ComboBoxColumn中顯示正確的文本。該轉換器會嘗試「解析」enum成員屬性作爲顯示名稱,或者只顯示實際的枚舉值。

EDIT#1:

如OP提到的,DataGridColumn不提供CellTemplate屬性。 因此,您必須覆蓋事件處理函數中創建的列:

var oldColumn = e.Column; 
var newColumn = new DataGridTemplateColumn(); 
// Copy required properties from 'oldColumn' to 'newColumn' 

// Create cell template (or load from XAML resources) 
var cellTemplate = new DataTemplate(); 
// modify template... 
newColumn.CellTemplate = cellTemplate; 
e.Column = newColumn; 
+0

如何將DataTemplate應用於e.Column?它不給我這個選擇。 –

+0

@TimKatheteStadler請參閱編輯#1。 – Herdo

+0

我會稍後再試。非常感謝你。 –