using System; using System.Globalization; using System.Linq; using System.Windows.Data; namespace ATS.Converters { public class EnumValueConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { // 验证输入参数 if (values.Length < 2 || values[0] == null || values[1] == null) { return null; } try { // 获取枚举类型 Type enumType = values[0] as Type; if (enumType == null || !enumType.IsEnum) { return null; } // 获取数值 object value = values[1]; // 确保数值类型匹配枚举的底层类型 Type underlyingType = Enum.GetUnderlyingType(enumType); object convertedValue; try { convertedValue = System.Convert.ChangeType(value, underlyingType); } catch { // 如果转换失败,尝试直接使用原始值 convertedValue = value; } // 将数值转换为枚举值 return Enum.ToObject(enumType, convertedValue); } catch { // 发生任何异常时返回null return null; } } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { if (value == null) { return [null, null]; } try { // 获取枚举值的底层数值 Type enumType = value.GetType(); if (!enumType.IsEnum) { return [null, null]; } Type underlyingType = Enum.GetUnderlyingType(enumType); object numericValue = System.Convert.ChangeType(value, underlyingType); // 返回枚举类型和对应的数值 return [enumType, numericValue]; } catch { return [null, null]; } } } }