Привязать DataGridComboBoxColumn к Enum - PullRequest
5 голосов
/ 03 ноября 2011

У меня есть простая DataGrid, к которой я хочу, чтобы пользователь добавил несколько строк. Однако я хочу, чтобы один из столбцов был ComboBox со значениями, взятыми из enum .

Какой самый простой способ сделать это в моем XAML?

Я пытался выполнить следующее, но я получаю сообщение об ошибке "Для двусторонней привязки требуется путь или 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 ]

9 голосов
/ 03 ноября 2011

Вы пытаетесь связать выбранный элемент, когда вы (предположительно) хотите связать список доступных элементов.Измените свою привязку на это:

<DataGridComboBoxColumn Header="MyHeader"
        ItemsSource="{Binding Source={StaticResource myEnumData}, Mode=OneWay}">
</DataGridComboBoxColumn>
6 голосов
/ 27 октября 2016

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>();
...