Salut,
Je bloque sur un morceau de code pour ma liaison de données. J'ai un ViewModel fait de propriétés de type Nullable<double>. Dans mon formulaire XAML, j'utilise donc un converter pour assurer la conversion et prendre en charge une valeur vide. Jusqu'ici, pas de problème. Mais je suis totalement incapable d'utiliser des décimales, car elles sont automatiquement supprimées. C'est-à-dire que quand j'écris "123.1" ou "123,1", j'obtiens : "1231" sans la décimale. Quand j'écris "123a", j'obtiens un Null comme prévu par le code.
Mon converter :
Je précise que par défaut, la CultureInfo.CurrentCulture est réglée sur "fr-FR" (j'en ai vérifié la valeur au sein du converter), mais le fait de changer par "en-US" ne change rien en-dehors du fait que la virgule n'est plus du tout considérée comme un caractère valide pour la décimale (écrire "123,1" rend donc le champs vide).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 // Nullable double converter public class NullDoubleConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (value == null ? null : value); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return null; string stringValue = value as string; if (string.IsNullOrEmpty(stringValue)) return null; double doubleValue; if (double.TryParse(stringValue, NumberStyles.Any, culture, out doubleValue) || double.TryParse(stringValue, NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out doubleValue) || double.TryParse(stringValue, NumberStyles.Any, CultureInfo.InvariantCulture, out doubleValue)) return doubleValue; //if (double.TryParse(stringValue.Substring(0, stringValue.Length - 1), NumberStyles.Number, CultureInfo.CurrentUICulture, out doubleValue)) //return doubleValue; return null; } }
Deuxième précision, je trouve que la doc n'est pas terrible concernant les converters, et donc je me suis posé la question d'une éventuelle inversion de la source et de la target... (pas du tout clair dans ma tête). Même si je n'ai pas mieux compris ce point, le fait d'inverser le code des méthodes "Convert" et "ConvertBack" n'a pas changé mon problème...
Une idée ? Une explication ? Je sais déjà qu'il y a d'autres méthodes que le converter, mais peu importe, j'aimerais quand même comprendre à quel endroit je me plante...
Merci par avance.
Partager