Establecer el valor en nulo en WPF vinculante




nullable binding (2)

Este convertidor de valor debería hacer el truco:

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

Declara una instancia de este convertidor en los recursos:

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

Y úsala en tu encuadernación:

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

Tenga en cuenta que TargetNullValue no es apropiado aquí: se usa para definir qué valor se debe usar cuando el source del enlace es nulo. Aquí Price no es la fuente, es una propiedad de la fuente ...

por favor, eche un vistazo a la siguiente línea

<TextBox Text="{Binding Price}"/>

¿Esta propiedad de precio desde arriba es un Decimal? (Decimal numerable).

Quiero que si el usuario elimina el contenido del cuadro de texto (es decir, ingresa cadena vacía, debería actualizar automáticamente la fuente con nulo (Nothing en VB).

¿Alguna idea sobre cómo puedo hacerlo 'Xamly'?


Estoy usando .NET 3.5 SP1, así que es muy simple:

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

Que significa (gracias Gregor por tu comentario):

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

sys es el espacio de nombres xml importado para System en mscorlib :

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

Espero que haya ayudado.





string