Set value to null in WPF binding

后端 未结 3 617
借酒劲吻你
借酒劲吻你 2020-11-28 21:37

please take a look at the following line


This Price property from above is a Decimal?

相关标签:
3条回答
  • 2020-11-28 22:20

    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)

    0 讨论(0)
  • 2020-11-28 22:30

    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...

    0 讨论(0)
  • 2020-11-28 22:31

    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.

    0 讨论(0)
提交回复
热议问题