如何在IValueConverter中使用targetType参数?

时间:2016-02-19 19:00:41

标签: c# wpf xaml type-conversion ivalueconverter

我有一个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 个答案:

答案 0 :(得分:4)

这应该没有太多开销:

public object Convert(
    object value, Type targetType, object parameter, CultureInfo culture)
{
    double result = ... // your math

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

答案 1 :(得分:1)

你可以这样做

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

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