【问题标题】:How do I use the targetType parameter in an IValueConverter?如何在 IValueConverter 中使用 targetType 参数?
【发布时间】:2016-06-01 11:26:52
【问题描述】:

我有一个 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 参数吗?

【问题讨论】:

    标签: c# wpf xaml type-conversion ivalueconverter


    【解决方案1】:

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

    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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-13
        • 2018-06-06
        • 2016-09-24
        • 1970-01-01
        • 1970-01-01
        • 2012-12-24
        • 2017-02-18
        相关资源
        最近更新 更多