将DataGridComboBoxColumn绑定到枚举

时间:2011-11-03 12:23:49

标签: wpf data-binding 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>

...

   <DataGrid.Columns>
        <DataGridComboBoxColumn Header="MyHeader" DisplayMemberPath="EnumValue" 
            SelectedItemBinding="{Binding Source={StaticResource myEnumData}}">
        </DataGridComboBoxColumn>
    </DataGrid.Columns>

2 个答案:

答案 0 :(得分:9)

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

<DataGridComboBoxColumn Header="MyHeader"
        ItemsSource="{Binding Source={StaticResource myEnumData}, Mode=OneWay}">
</DataGridComboBoxColumn>

答案 1 :(得分:6)

XAML

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

<DataGridComboBoxColumn ItemsSource="{x:Static ext:Extensions.GetEnumTypes}" SelectedItemBinding="{Binding EnumType}" />

静态类

public static IEnumerable<EnumType> GetEnumTypes => Enum.GetValues(typeof(EnumType)).Cast<EnumType>();