将DataGridComboBoxColumn绑定到枚举

ope*_*hac 5 data-binding wpf wpfdatagrid

我有一个简单的DataGrid,我希望用户添加一些行.但是我希望其中一个列是一个ComboBox,它的值取自枚举.

在我的XAML中最简单的方法是什么?

我试过跟随,但我收到错误"双向绑定需要Path或XPath"

<Window.Resources>
    <ObjectDataProvider x:Key="myEnumData"
                MethodName="GetValues" 
                ObjectType="{x:Type sys:Enum}">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="local:MyEnum" />
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

...

   <DataGrid.Columns>
        <DataGridComboBoxColumn Header="MyHeader" DisplayMemberPath="EnumValue" 
            SelectedItemBinding="{Binding Source={StaticResource myEnumData}}">
        </DataGridComboBoxColumn>
    </DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)

Ste*_*rex 9

当您(可能)想要绑定可用项列表时,您正在尝试绑定所选项.将绑定更改为:

<DataGridComboBoxColumn Header="MyHeader"
        ItemsSource="{Binding Source={StaticResource myEnumData}, Mode=OneWay}">
</DataGridComboBoxColumn>
Run Code Online (Sandbox Code Playgroud)


Sha*_*iro 6

XAML

xmlns:ext="clr-namespace:Project.Core.Tools;assembly=Project.Core"

<DataGridComboBoxColumn ItemsSource="{x:Static ext:Extensions.GetEnumTypes}" SelectedItemBinding="{Binding EnumType}" />
Run Code Online (Sandbox Code Playgroud)

静态类

public static IEnumerable<EnumType> GetEnumTypes => Enum.GetValues(typeof(EnumType)).Cast<EnumType>();
Run Code Online (Sandbox Code Playgroud)