2011-07-07 12 views
5

Ho il seguente codice nel mio file XAML, con una casella di controllo molto semplice. Quando la casella è selezionata, sta impostando la mia proprietà come vera. Tuttavia, quando deseleziono la casella di controllo, ho potuto vedere che il valore è nullo, durante il debug con un punto di interruzione nella funzione convertBack. Ho anche provato a impostare IsThreeState = false, ma ancora non funziona. Qualcuno sa perché?La mia casella di controllo restituisce NULL quando deselezionata

<Window.Resources> 
    <this:DebugValueConverter x:Key="debugConverter"/> 
</Window.Resources> 
<StackPanel> 
<CheckBox Content="Testing" IsThreeState="False" 
          IsChecked="{Binding CheckBoxValue, 
             Converter={StaticResource debugConverter}, 
             FallbackValue=false,TargetNullValue=false}" 
         /> 
</StackPanel> 

CheckBoxValue è una proprietà bool nel mio modello di vista.

La classe convertitore è: public class DebugValueConverter: IValueConverter { #region IValueConverter Utenti

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value; 
    } 

    #endregion 
} 
+0

Come è la proprietà impostata su 'null' se è un' bool'? Pubblica tutto il tuo codice per favore. –

+0

Per favore pubblica il tuo codice "CheckBoxValue'. –

risposta

7

È semplicemente perché hai TargetNullValue=false sul tuo Binding. Ciò significa che un valore di verrà convertito in null, che è ciò che vede il tuo convertitore.

+1

Grazie, hai ragione, funziona dopo aver rimosso TargetNullValue = false. – seekle

0

IsChecked spesso su null anche quando il CheckBox non è tre stato. O si lega a un bool? e usa (foo == true) per evitare il null, o associare un bool e usare un convertitore che converte da bool? bool trattando null come falso.

+1

Quello che segue è un frammento di microsoft documention, afferma chiaramente che potrò avere solo 2 stati: "Oltre agli stati controllati e non controllati, i controlli CheckBox possono avere un terzo stato, indeterminato.Se la proprietà IsThreeState è impostata su true la proprietà IsChecked può essere impostata su null (indeterminato). " – seekle

+0

Sì. Questa è la documentazione. Come stai scoprendo, non è accurato. –

Problemi correlati