Search code examples
wpfdatagridcomboboxcolumn

DataGridComboBox Entries through Converter


Quick WPF Question. Here's my situation: I have a DataGridComboBoxColumn with an Enum as ItemsSource. But of course I don't want to actually Displays the Enum Values. I have a converter which looks up the according strings in a Dictionary according to the 'Enum Item'. That's all good and fancy. But where do I have to declare the converter?

I tried this:

                <DataGridComboBoxColumn Width="120" Header="Expense.Column.FoodCode" ItemsSource="{Binding Source={StaticResource FoodCodes}}" SelectedItemBinding="{Binding FoodCode, Converter={StaticResource FoodCodeConverter}}" />

But SelectedItemBinding is apparently the wrong place. Which Property of DataGridComboBoxColumn is responsible for the displayed item text?

Thanx in advance.

EDIT: So far I have:

<DataGridTemplateColumn Width="86" Header="Expense.Column.WageAccount" >
    <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding WageAccount, Converter={StaticResource WageAccountConverter}}"/>
</DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <ComboBox ItemsSource="{StaticResource WageAccounts}">
            <ComboBox.ItemTemplate>
        <DataTemplate>
        <TextBlock Text="{Binding Expenses.WaggeAccount, Converter={StaticResource WageAccountConverter}}"/>
    </DataTemplate>
        </ComboBox.ItemTemplate>
        </ComboBox>
    </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

Solution

  • OK. Finally I got it!

                        <fpc:DataGridTemplateColumn Width="86" Header="Expense.Column.WageAccount" >
                        <fpc:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding WageAccount, Converter={StaticResource WageAccountConverter}}"/>
                            </DataTemplate>
                        </fpc:DataGridTemplateColumn.CellTemplate>
                        <fpc:DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{StaticResource WageAccounts}">
                                    <ComboBox.ItemTemplate>
                                        <DataTemplate>
                                            <StackPanel>
                                                <TextBlock Text="{Binding Converter={StaticResource WageAccountConverter}}"/>
                                            </StackPanel>
                                        </DataTemplate>
                                    </ComboBox.ItemTemplate>
                                </ComboBox>
                            </DataTemplate>
                        </fpc:DataGridTemplateColumn.CellEditingTemplate>
                    </fpc:DataGridTemplateColumn>
    

    Its basically what I posted in the Edit of the original question with one small differenct The Line:

    <TextBlock Text="{Binding Expenses.WageAccount, Converter={StaticResource WageAccountConverter}}"/>
    

    changed to:

    <TextBlock Text="{Binding Converter={StaticResource WageAccountConverter}}"/>