2010-01-14 6 views
6

Ho difficoltà a impostare un TextBox vuoto su null su un campo DB nullable.Cancellazione della casella di testo non imposta il binding su null

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" /> 

Quando entro un valore in esso il legame va bene e il valore inserito è passato
Quando lascio un valore nullo solo un null viene passato
Se elimino il valore da la casella di testo il valore passato è il valore originale della casella di testo e l'interfaccia utente non viene notificata della modifica Grrrrrrrrrrrrrrrr

Ho passato molto tempo a verificare le opzioni a meno di mettere il codice dietro il OnTextChanged di ogni campo nullable non riesco a vedere l'efficienza nel fare questo.

Grazie in anticipo:

ps. Hanno esaminato TargetNullValue o nessun successo

Visual Studio 2008 - SP1 - Net 3.5

risposta

3

è consigliabile utilizzare un value converter. Dovresti essere in grado di implementare il metodo ConvertBack per tradurre stringhe vuote in null.

+0

dovuto convertire in uno spazio, come una stringa vuota non ha innescato proprietà evento modificato per qualche motivo. Grazie per il vostro aiuto, implementerò in tutti i posti richiesti. – Traci

14

Impostare la proprietà TargetNullValue del legame String.Empty:

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

ho provato e funziona per me.

E se non sbaglio (ti prego perdonami se sono), si dovrebbe impostare la StringFormat proprietà come questa:

StringFormat={}{0:C} 

Questo è anche probabilmente il motivo dell'eccezione che hai.

+0

xmlns: sys = "clr-namespace: System; assembly = mscorlib" Ho provato a farlo ma continuo a ricevere l'errore 24 Impossibile caricare il tipo 'Microsoft.Windows.Design.Metadata.ProvideMetadataAttribute' da assembly 'Microsoft.Windows.Design.Extensibility, Versione = 3.5.0.0, Cultura = neutrale, PublicKeyToken = b03f5f7f11d50a3a '. Linea '1' Posizione '6680'. – Traci

+0

Io donno. Ma se fossi in te, proverei solo per un test per avere un TextBox senza le altre definizioni; solo vincolante e TargetNullValue. In questo modo è possibile trovare la fonte dell'eccezione. – Shimmy

+0

Ho provato a rimuovere StringFormat tutti insieme e sto ancora ottenendo lo stesso meassage. --- ---- Questo è tutto ciò che ho e ottengo ancora l'eccezione di cui sopra – Traci

3

Per me solo convertitore funziona: Ecco 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; 
    } 
} 
Problemi correlati