2010-12-10 5 views
0

Je dois CONVRT un double à l'aide d'un autre convertisseur et un paramètre:"1/3" comme ConverterParameter

Ceci est mon talon XAML:

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

c'est le convertisseur:

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

maintenant, cela ne sert à rien de dire que cela dépend de la culture, etc ..

est-il un moyen de « hardcode » un do Peut-on reconnaître le double? Parce que la variante ci-dessus pourrait être écrit de différentes façons, par exemple .:

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

ou encore

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

etc ...

une question:

Comment Je spécifie 1/3 dans le format flottant? quelque chose comme

ConverterParameter=0.333333333333333333333333333333333333333333333333333333 
+0

Etes-vous sûr qu'il est passé en être comme une valeur numérique du tout? D'après mon expérience, la plupart des valeurs XAML finissent par passer comme des chaînes, même si elles ressemblent à des chiffres ... –

+0

@Dan Puzey: comme «objet» en général ... comme des cordes peut-être enfin, c'est pourquoi je demande, parce que don 't know :) – serhio

+0

Si vous mettez un point d'arrêt sur la première ligne de votre convertisseur, vous pouvez vérifier 'value.GetType()' et voir ce qu'il est passé comme ... –

Répondre

0

essayer cette

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

:) enfin, c'était la variante "dure" que je n'aime pas. Mais comme c'est le seul qui fonctionne pour moi, je n'ai pas le choix. Juste j'ai ajouté CultureInfo.InvariantCulture à la fin. – serhio

1

Unfortunetly pas, l'interface fournit des méthodes IValueConverter objet acceptation - qui ne sont pas de type sauver - au lieu de génériques.
Mais vous pouvez ajouter un Culture.InvariantCulture à votre analyse et lancer une exception. De cette façon, vous informeriez l'utilisateur du format "incorrect".

+0

Comment puis-je spécifier" 1/3 "dans le format flottant? – serhio

+1

vous ne pouvez pas. 1/3 n'est pas un nombre, c'est une expression arithmétique. Pour votre but je créerais deux convertisseurs -> MultiplierConverter et DividerConverter. Vous pourriez aussi inverser la logique et créer un convertisseur Divider, mais cela rendrait votre orge xaml lisible ... – Jaster

Questions connexes