【WPF】Enum与Converter的使用

在使用场景中大家都会遇到,下拉列表显示汉字,而存储使用的是对应的value值,从而转换就成了一个问题,接下来给大家带来一套的解决方案,方法可能不是特别高明,但是很实用,易读易维护,话不多说上代码!

Enum的使用

定义

定义的时候添加Description描述,这样可以一个Enum存在3个值,否则显示中文就需要将"Key"变为中文,但是做法有点落入下成了。

 /// <summary>
 /// 动作类型字典
 /// </summary>
 public enum ActionType
 {
     [Description("待机,技能自身")]
     Standby = 0,

     [Description("行走,技能过程")]
     Walk = 1,

     [Description("跑步,技能目标")]
     Run = 2
}

赋值给下拉列表集合:

ActionTypes = new ObservableCollection<ActionTypeModel>();

foreach (var enumData in Enum.GetValues(typeof(ActionType)))
{
    ActionTypes.Add(new ActionTypeModel() {Name = EnumHelper.GetDescriptionByEnum((ActionType)enumData), ActionCode = (int)(ActionType)enumData });
}

注意:博主定义了一个EnumHelper工具类,是用于获取Enum中Description的值的,没什么说的,网上找的

using System;
using System.ComponentModel;

namespace EffectsPackTool.Common
{
    /// <summary>
    /// Enum帮助类
    /// </summary>
    public static class EnumHelper
    {
        /// <summary>
        /// 获取Enum的描述信息
        /// </summary>
        /// <param name="enumValue"></param>
        /// <returns></returns>
        public static string GetDescriptionByEnum(Enum enumValue)
        {
            string value = enumValue.ToString();
            System.Reflection.FieldInfo field = enumValue.GetType().GetField(value);
            object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);    //获取描述属性
            if (objs.Length == 0)    //当描述属性没有时,直接返回名称
                return value;
            DescriptionAttribute descriptionAttribute = (DescriptionAttribute)objs[0];
            return descriptionAttribute.Description;
        }
    }
}

Converter的使用

自定义Converter规则

没什么说的,简单,主要是继承IValueConverter

using EffectsPackTool.Common;
using EffectsPackTool.Models.Enum;
using System;
using System.ComponentModel;
using System.Windows.Data;

namespace EffectsPackTool.Converter
{
    [TypeConverter(typeof(ActionTypeConverter))]
    public class ActionTypeConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
                return "";

            return EnumHelper.GetDescriptionByEnum(((ActionType)value));
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value;
        }
    }
}

使用

先在资源列表里声明一个Converter模板,之后使用就可以了
XXView.xaml

<UserControl.Resources>
    <converts:ActionTypeConverter x:Key="ActionCodeTypeConverter" />
</UserControl.Resources>

Binding="{Binding ActionCode, Converter={StaticResource ActionCodeTypeConverter}}"
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF的DataGridComboBoxColumn是一种用于数据网格控件的列类型,它可以显示ComboBox下拉列表,并且可以使用Converter将不同的数据进行绑定。 ConverterWPF中的一个重要概念,它可以在数据绑定过程中进行值的转换。使用Converter可以帮助我们在绑定ComboBox时,将不同的数据进行转换和展示。 使用Converter绑定不同数据的步骤如下: 1. 首先,我们需要创建一个实现了IValueConverter接口的Converter类。这个Converter类负责将源数据转换为目标数据。例如,我们可以将一个int类型的数据转换为对应的字符串类型数据。 2. 接下来,在XAML文件中创建DataGridComboBoxColumn列,并设置Binding属性为对应的数据源。可以使用ItemsSource属性来绑定ComboBox的数据源,可以使用SelectedItemBinding属性来绑定选中的项。同时,使用Converter属性将Converter类与该列的数据绑定进行关联。 3. 在Converter类中,实现Convert方法和ConvertBack方法。Convert方法用于将源数据转换为目标数据,而ConvertBack方法则用于将目标数据转换回源数据。 通过上述步骤,我们就可以实现在DataGridComboBoxColumn列中使用Converter绑定不同的数据。 总结起来,WPF的DataGridComboBoxColumn通过使用Converter可以实现将不同的数据进行绑定和展示。使用Converter可以将源数据转换为目标数据,从而实现ComboBox的数据源绑定和数据项的转换。通过掌握这种使用方式,我们可以更灵活地使用DataGridComboBoxColumn列,并展示不同类型的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值