WPF 表格中单元格使用下拉框显示枚举属性的一种方式
1.实体类中有枚举类型的属性:
public class BelowCameraPosition: MachinePositionBase
{public CameraPosition CameraPositionType { get; set; }
}
public enum CameraPosition
{[Description("×")]Null,[Description("避让位置")]Avoid
}
然后使用表格控件显示实体类列表,这里的控件可能是第三方控件,我这里演示的也是第三方控件实现的。
第一步:
定义转换器,提供下拉框资源:
public class EnumToItemsSourceConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value == null || !value.GetType().IsEnum)return null;var enumType = value.GetType();var items = new List<KeyValuePair<string, object>>();foreach (var enumValue in Enum.GetValues(enumType)){var field = enumType.GetField(enumValue.ToString());var attribute = field.GetCustomAttribute<DescriptionAttribute>();var displayName = attribute?.Description ?? enumValue.ToString();items.Add(new KeyValuePair<string, object>(displayName, enumValue));}return items;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){throw new NotImplementedException();}
}
第二步:
修改表格列定义:
<telerik:GridViewComboBoxColumnWidth="*"DataMemberBinding="{Binding CameraPositionType, Mode=TwoWay}"Header="类型"ItemsSourceBinding="{Binding CameraPositionType, Converter={StaticResource EnumToItemsSourceConverter}}"DisplayMemberPath="Key"SelectedValuePath="Value" />
效果:
其中类型一列即为枚举列
完毕。