using System;
using System.Globalization;
using System.Windows.Data;
namespace SWRIS.Converters
{
public class PercentageConverter : IValueConverter
{
///
/// 将值转换为百分比显示(例如:0.85 -> "85%")
///
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null) return "0";
try
{
// 支持多种数值类型
double numericValue = System.Convert.ToDouble(value);
// 检查是否有参数指定小数位数
int decimalPlaces = 0;
if (parameter != null && int.TryParse(parameter.ToString(), out int places))
{
decimalPlaces = places;
}
// 转换为百分比(乘以100)
double percentage = numericValue * 100;
// 格式化输出
string format = $"F{decimalPlaces}";
return percentage.ToString(format);
}
catch
{
return "0";
}
}
///
/// 将百分比字符串转换回数值(例如:"85%" -> 0.85)
///
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null) return 0.0;
string stringValue = value.ToString();
try
{
// 移除百分比符号和空格
stringValue = stringValue.Replace("%", "").Trim();
if (double.TryParse(stringValue, NumberStyles.Any, culture, out double result))
{
// 转换回小数(除以100)
return result / 100.0;
}
return 0.0;
}
catch
{
return 0.0;
}
}
}
}