using System.Globalization;
using System.Windows.Data;
namespace YY.Admin.Core.Converter
{
///
/// 将枚举值和 bool 互转,适用于 ToggleButton 或 RadioButton
///
public class EnumToBoolConverter : IValueConverter
{
///
/// 将枚举值转换为 bool
///
/// 绑定的枚举值
///
/// ConverterParameter 指定要匹配的枚举值
///
/// 匹配返回 true,否则 false
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string enumValue = value?.ToString() ?? string.Empty;
string targetValue = parameter?.ToString() ?? string.Empty;
return enumValue.Equals(targetValue, StringComparison.OrdinalIgnoreCase);
}
///
/// 将 bool 转回枚举值
///
/// ToggleButton.IsChecked
///
/// ConverterParameter 指定对应的枚举值
///
/// 如果 true 返回枚举,否则返回 Binding.DoNothing
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool isChecked && isChecked && parameter != null)
{
// 判断 targetType 是否是 Nullable 类型
if (Nullable.GetUnderlyingType(targetType) != null)
{
// 获取 Nullable 的基础类型
Type underlyingType = Nullable.GetUnderlyingType(targetType)!;
// 确保基础类型是枚举类型
if (underlyingType?.IsEnum == true)
{
return Enum.Parse(underlyingType, parameter.ToString()!);
}
}
// 如果不是枚举类型或 Nullable 类型,返回 Binding.DoNothing
else if (targetType.IsEnum)
{
return Enum.Parse(targetType, parameter.ToString()!);
}
}
return Binding.DoNothing;
}
}
}