Ce convertisseur de valeur devrait faire l'affaire :
public class StringToNullableDecimalConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
decimal? d = (decimal?)value;
if (d.HasValue)
return d.Value.ToString(culture);
else
return String.Empty;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
string s = (string)value;
if (String.IsNullOrEmpty(s))
return null;
else
return (decimal?)decimal.Parse(s, culture);
}
}
Déclarez une instance de ce convertisseur dans le fichier ressources :
<Window.Resources>
<local:StringToNullableDecimalConverter x:Key="nullDecimalConv"/>
</Window.Resources>
Et utilisez-le dans votre reliure :
<TextBox Text="{Binding Price, Converter={StaticResource nullDecimalConv}}"/>
Il convient de noter que TargetNullValue
n'est pas approprié ici : il est utilisé pour définir quelle valeur doit être utilisée lorsque l'option source
de la liaison est nulle. En l'occurrence, il s'agit d'une Price
n'est pas la source, c'est une propriété de la source...