Двойной "1/3" в качестве ConverterParameter - PullRequest
0 голосов
/ 10 декабря 2010

Я должен преобразовать двойное число в другое, используя конвертер и параметр:

Это моя заглушка 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 ]

1 голос
/ 10 декабря 2010

К сожалению, нет, интерфейс IValueConverter предоставляет методы, принимающие объект - который не является типом save - вместо универсальных.
Но вы можете добавить Culture.InvariantCulture в ваш анализ и вызвать исключение.Таким образом, вы будете уведомлять пользователя о «неправильном» формате.

0 голосов
/ 10 декабря 2010

попробуйте

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();
    }
}
...