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:GridViewComboBoxColumn
Width="*"
DataMemberBinding="{Binding CameraPositionType, Mode=TwoWay}"
Header="类型"
ItemsSourceBinding="{Binding CameraPositionType,
Converter={StaticResource EnumToItemsSourceConverter}}"
DisplayMemberPath="Key"
SelectedValuePath="Value" />
效果:
其中类型一列即为枚举列
完毕。