繁体   English   中英

如何在 IValueConverter 中使用 targetType 参数?

[英]How do I use the targetType parameter in an 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参数?

这应该可以在没有太多开销的情况下工作:

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

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

你可以这样做

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM