2010-12-10 33 views
0

我有使用轉換器和參數convrt雙到其他:雙「1/3」作爲ConverterParameter

這是我的XAML存根:

Converter={StaticResource ToOtherDoubleConverter}, ConverterParameter=-1/2 

這是轉換器:

[ValueConversion(typeof(double), typeof(double))] 
public class DoubleToOtherDoubleConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
          CultureInfo culture) 
    { 
     return (double)value * double.Parse(parameter.ToString()); 
    } 

現在,這是沒用的,說這是文化的依賴等。

有沒有一種方法來「硬編碼」一做能否被認定爲雙重? 由於上述變異可以用不同的方式,例如通過:

ConverterParameter=-1/2 
ConverterParameter=-0.5 
ConverterParameter=-0,5 
etc. 

或也

double.Parse(parameter.ToString()); 
(double)parameter; 

等等

一個問題:

哪有我指定1/3中的浮點格式?像

ConverterParameter=0.333333333333333333333333333333333333333333333333333333 
+0

你確定它正在傳過來的數值呢?根據我的經驗,大多數XAML值最終會以字符串的形式傳遞,即使它們看起來像數字一樣... – 2010-12-10 12:36:24

+0

@Dan Puzey:作爲一般對象......最終可能是字符串,這就是爲什麼我要問,因爲不要不知道:) – serhio 2010-12-10 12:38:42

+0

如果你在轉換器的第一行放置了一個斷點,你可以檢查'value.GetType()',看看它傳入的是什麼...... – 2010-12-10 12:41:44

回答

0

試試這個

public class DoubleToOtherDoubleConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     var frac = ((string) parameter).Split('/'); 
     if (frac.Length == 2) 
      return (double) value*double.Parse 
       (frac[0])/double.Parse(frac[1]); 
     return (double) value* double.Parse(((string) parameter) 
      .Replace(",", ".")); 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

:)最後,這是我不喜歡的「硬」變體。但因爲它是唯一適合我的工具,所以我別無選擇。只是我最後添加了CultureInfo.InvariantCulture。 – serhio 2010-12-10 12:59:45

1

不幸的是,IValueConverter接口提供的方法接受對象 - 這不是類型保存 - 而是泛型。
但是你可以添加一個Culture.InvariantCulture到你的解析並拋出一個異常。這樣你會通知用戶有關「不正確」的格式。

+0

如何在浮動格式中指定「1/3」? – serhio 2010-12-10 12:34:14

+1

你不能。 1/3不是一個數字,它是一個算術表達式。爲了您的目的,我會創建兩個轉換器 - > MultiplierConverter和DividerConverter。你也可以只是反轉邏輯,只是創建一個Divider轉換器,但這會讓你的xaml大麥可讀... – Jaster 2010-12-10 12:54:11