2016-02-19 62 views
1

我有一個IValueConverter,我想用做簡單的數學運算具有以下Convert功能:如何在IValueConverter中使用targetType參數?

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

這應該沒有太多的開銷工作:

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

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

謝謝。我知道必須有這樣的東西... – Will

+0

不客氣。請注意,當您需要將浮點值四捨五入到最接近的整數時,這可能不夠。 – Clemens

0

你可以做到這一點

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

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