如何在IValueConverter中使用targetType参数?

7

我有一个 IValueConverter,我想用它来执行简单的数学运算,该转换器包含以下 Convert 函数:

public object Convert(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        if (parameter == null)
        {
            return value;
        }

        switch (((string)parameter).ToCharArray()[0])
        {
            case '%':
                return (double)value % double.Parse(
                    ((string)parameter).TrimStart(new char[] {'%'}));
            case '*':
                return (double)value * double.Parse(
                    ((string)parameter).TrimStart(new char[] {'*'}));
            case '/':
                return (double)value / double.Parse(
                    ((string)parameter).TrimStart(new char[] {'/'}));
            case '+':
                return (double)value + double.Parse(
                    ((string)parameter).TrimStart(new char[] {'+'}));
            case '-':
                if (((string)parameter).Length > 1)
                {
                    return (double)value - double.Parse(
                        ((string)parameter).TrimStart(new char[] {'-'}));
                }
                else
                {
                    return (double)value * -1.0D;
                }
            default:
                return DependencyProperty.UnsetValue;
        }
    }

显然,这种方法并不适用于每种情况,因为有些属性的类型是int

我知道targetType参数可能是我需要在此转换器中使用的内容,但我找不到如何正确使用它将返回值转换为相应的内容的示例。

有人知道如何在此上下文中使用targetType参数吗?

2个回答

8
这应该不会有太多额外的开销就能正常工作:
public object Convert(
    object value, Type targetType, object parameter, CultureInfo culture)
{
    double result = ... // your math

    return System.Convert.ChangeType(result, targetType);
}

2

你可以做到这一点

var typeCode  = Type.GetTypeCode(targetType); // Pass in your target type

if(typeCode  == TypeCode.Int32)
{
  // it is int type
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接