WPF DataGrid手动声明枚举下拉列无选项问题求助
WPF DataGrid手动声明ComboBox列绑定枚举的内置解决方法
不需要自定义转换器,用WPF内置的ObjectDataProvider就能实现和AutoGenerateColumns一致的枚举下拉效果,步骤如下:
- 在窗口/用户控件的资源中定义枚举值的数据源
首先要引入必要的命名空间:
xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:你的项目命名空间" <!-- 枚举所在的命名空间 -->
然后添加ObjectDataProvider资源,通过Enum.GetValues方法获取枚举的所有可选值:
<Window.Resources> <ObjectDataProvider x:Key="StatusEnumValues" ObjectType="{x:Type sys:Enum}" MethodName="GetValues"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="local:OrderStatus"/> <!-- 替换为你的枚举类型 --> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources>
- 手动声明DataGridComboBoxColumn并绑定
将列的ItemsSource绑定到上面定义的资源,同时绑定SelectedItemBinding到对象的枚举属性:
<DataGrid AutoGenerateColumns="False"> <DataGrid.Columns> <!-- 其他列 --> <DataGridComboBoxColumn Header="订单状态" ItemsSource="{Binding Source={StaticResource StatusEnumValues}}" SelectedItemBinding="{Binding OrderStatus}"/> <!-- 替换为你的对象枚举属性名 --> </DataGrid.Columns> </DataGrid>
这种方式完全依赖WPF内置机制,和AutoGenerateColumns自动生成枚举列的逻辑一致,不需要额外编写转换器或后台代码。
内容的提问来源于stack exchange,提问作者Denis Schaf
相关产品推荐
相关产品推荐

