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)