Set value to null in WPF binding Set value to null in WPF binding wpf wpf

Set value to null in WPF binding


I am using .NET 3.5 SP1 so it's very simple:

<TextBox Text="{Binding Price, TargetNullValue=''}"/>

Which stands for (thanks Gregor for your comment):

<TextBox Text="{Binding Price, TargetNullValue={x:Static sys:String.Empty}}"/>

sys is the imported xml namespace for System in mscorlib:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

Hope that helped.


This value converter should do the trick :

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

Declare an instance of this converter in the ressources :

<Window.Resources>    <local:StringToNullableDecimalConverter x:Key="nullDecimalConv"/></Window.Resources>

And use it in your binding :

<TextBox Text="{Binding Price, Converter={StaticResource nullDecimalConv}}"/>

Note that TargetNullValue is not appropriate here : it is used to define which value should be used when the source of the binding is null. Here Price is not the source, it's a property of the source...


You can try using a ValueConverter (IValueConverter)http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

Of the back of my head here, something like:

public class DoubleConverter : IValueConverter{    public object Convert(object value, Type targetType,         object parameter, CultureInfo culture)    {        return (double)value;    }    public object ConvertBack(object value, Type targetType,         object parameter, CultureInfo culture)    {    var doubleValue = Convert.ToDouble(value);    return (doubleValue == 0 ? null : doubleValue);    }}

(Might need some tweaking though)