我有一个简单的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>
答案 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>();