WPF 表格中单元格使用下拉框显示枚举属性的一种方式

1.实体类中有枚举类型的属性:

cs 复制代码
public class BelowCameraPosition: MachinePositionBase
{
    
    public CameraPosition CameraPositionType { get; set; }
}
cs 复制代码
public enum CameraPosition
{
    [Description("×")]
    Null,
    [Description("避让位置")]
    Avoid
}

然后使用表格控件显示实体类列表,这里的控件可能是第三方控件,我这里演示的也是第三方控件实现的。

第一步:

定义转换器,提供下拉框资源:

cs 复制代码
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();
    }
}

第二步:

修改表格列定义:

XML 复制代码
<telerik:GridViewComboBoxColumn
    Width="*"
    DataMemberBinding="{Binding CameraPositionType, Mode=TwoWay}"
    Header="类型"
    ItemsSourceBinding="{Binding CameraPositionType, 
                          Converter={StaticResource EnumToItemsSourceConverter}}"
    DisplayMemberPath="Key"
    SelectedValuePath="Value" />

效果:

其中类型一列即为枚举列

完毕。

相关推荐
almighty272 小时前
C# WPF实现ComboBox实时搜索与数据绑定
开发语言·c#·wpf·combobox
玖笙&3 小时前
✨WPF编程基础【1.2】:XAML中的属性
c++·wpf·visual studio
c#上位机6 小时前
wpf之 Popup
wpf
Dream achiever6 小时前
4.WPF控件---Border
wpf
syty20201 天前
shardingsphere加载过程
wpf
Dream achiever1 天前
7.WPF 的 TextBox 和 TextBlock 控件
开发语言·c#·wpf
玖笙&1 天前
✨WPF编程基础【1.1】:XAML文档框架
c++·visualstudio·wpf
Dream achiever1 天前
8.WPFTextBox控件的鼠标和键盘事件
开发语言·c#·wpf
Dream achiever1 天前
10.WPF布局
开发语言·c#·wpf
多多*2 天前
linux安装hbase(完)
java·分布式·算法·c#·wpf