2010-01-14 19 views
6

Tengo dificultades para configurar un campo de texto vacío para anular en un campo de base de datos con nulos.Al borrar el cuadro de texto no se establece el enlace a nulo

XAML

<y:TextBox Text="{Binding Year1Cost, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged, 
    NotifyOnValidationError=True, 
    ValidatesOnDataErrors=True, 
    ValidatesOnExceptions=True, 
    StringFormat=\{0:c\}}" Grid.Row="3" Grid.Column="1" /> 

Cuando entro en cualquier valor en ella la unión es fina y se pasa el valor introducido
Cuando salgo de un valor nulo solo un nulo se pasa
Si elimino el valor de el TextBox el valor pasado es el valor original del cuadro de texto y la interfaz de usuario no se notifica del cambio Grrrrrrrrrrrrrrrr

He pasado mucho tiempo revisando las opciones nada menos que poner el código detrás del OnTextChanged de cada campo que admite nulos, no puedo ver la eficiencia al hacer esto.

Gracias de antemano:

ps. Han mirado TargetNullValue o ningún éxito

Visual Studio 2008 - SP1 - Net 3.5

Respuesta

3

considerar el uso de un value converter. Debería poder implementar el método ConvertBack para traducir cadenas vacías a valores nulos.

+0

debía convertir, a un espacio, como una cadena vacía no desencadenar caso de propiedad cambiada por alguna razón. Gracias por su ayuda, implementaré en todos los lugares requeridos. – Traci

14

Conjunto TargetNullValue la propiedad de la unión a String.Empty:

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

lo probé y funciona para mí.

Y si no estoy equivocado (por favor, perdóname si soy), debe establecer la propiedad como esta StringFormat:

StringFormat={}{0:C} 

Esto es aún probablemente la razón de la excepción que tienes.

+0

xmlns: sys = "clr-namespace: System; assembly = mscorlib" Intenté esto pero sigo obteniendo el Error 24 No se pudo cargar el tipo 'Microsoft.Windows.Design.Metadata.ProvideMetadataAttribute' del ensamblado 'Microsoft.Windows.Design.Extensibility, Versión = 3.5.0.0, Cultura = neutral, PublicKeyToken = b03f5f7f11d50a3a '. Línea '1' Posición '6680'. – Traci

+0

Yo donno. Pero si fuera usted, intentaría solo una prueba para tener un TextBox sin las otras definiciones; solo vinculante y TargetNullValue. De esta manera puede ayudarlo a encontrar el origen de la excepción. – Shimmy

+0

Intenté eliminar el StringFormat todos juntos y sigo recibiendo la misma medida. --- ---- Eso es todo lo que tengo y todavía obtengo la excepción anterior – Traci

3

Para mí sólo convertidor funciona: Aquí es a link

public class NullableConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value == null ? string.Empty : String.Format(culture, "{0}", value); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return string.IsNullOrEmpty(String.Format(culture, "{0}", value)) ? null : value; 
    } 
} 
Cuestiones relacionadas