Use ObjectDataProvider
as mentioned in this example. It's the preferred way of binding enum to combo boxes since you don't have to manually fill enum collection in your code.
Declare ObjectDataProvider
in your resources:
<ObjectDataProvider x:Key="myEnum" MethodName="GetValues" ObjectType="{x:Type core:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type Type="{x:Type l:MyEnum}"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
(You have to declare your local namespace l
and core
namespace: xmlns:core="clr-namespace:System;assembly=mscorlib"
)
then bind DataGridComboBoxColumn
to it:
<DataGridComboBoxColumn Width="200" Header="Optionen" ItemsSource="{Binding Source={StaticResource myEnum}}" SelectedValuePath="Value"/>
EDIT
Since you have to modify your enum collection in runtime, take a look at this question
In short, it's a known issue of DataGridComboBoxColumn
. You have to alter its element style:
<DataGridComboBoxColumn Width="200" Header="Optionen">
<DataGridComboBoxColumn.ElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource"
Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window},
Path=DataContext.TestCollection}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window},
Path=DataContext.TestCollection}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>