双“1/3”作为ConverterParameter

时间:2010-12-10 11:37:39

标签: .net wpf xaml converter

我必须使用转换器和参数将其转换为double:

这是我的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

2 个答案:

答案 0 :(得分:1)

不幸的是,IValueConverter接口提供了接受对象的方法 - 不是类型保存 - 而不是泛型。
但是你可以在你的解析中添加一个Culture.InvariantCulture并抛出异常。这样您就会通知用户“不正确”的格式。

答案 1 :(得分: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();
    }
}