2011-07-07 15 views
5

Tengo el siguiente código en mi archivo XAML, con una casilla de verificación muy simple. Cuando la casilla de verificación está marcada, establece mi propiedad como verdadera. Sin embargo, cuando desactivo la casilla, pude ver que el valor es nulo, al depurar con un punto de interrupción en la función convertBack. Incluso intenté establecer IsThreeState = false, pero aún no funcionaba. Alguien sabe por qué?Mi casilla de verificación devuelve NULL cuando está desmarcada

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

El CheckBoxValue es una propiedad bool en mi modelo de vista.

La clase convertidor es: public class DebugValueConverter: IValueConverter { #region IValueConverter miembros

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

¿Cómo se establece la propiedad en 'null' si es un' bool'? Publica todo tu código por favor. –

+0

Por favor, publique su código 'CheckBoxValue'. –

Respuesta

7

Es simplemente porque tiene TargetNullValue=false en su Binding. Eso significa que un valor de false de su propiedad CheckBoxValue se traducirá a null, que es lo que ve su convertidor.

+1

Gracias, tienes razón, funciona después de eliminar TargetNullValue = false. – seekle

0

IsChecked menudo es nulo, incluso cuando su casilla de verificación no es de tres estados. O se unen a un bool? y use (foo == verdadero) para evitar el nulo, o enlazar a un bool y usar un convertidor que se convierta de bool? bool tratando a nulo como falso.

+1

El siguiente fragmento de la documentación de Microsoft indica claramente que solo puedo tener 2 estados: "Además de los estados marcados y no comprobados, los controles CheckBox pueden tener un tercer estado, indeterminado. Si la propiedad IsThreeState está configurada para es cierto que la propiedad IsChecked se puede establecer en nulo (indeterminado). " – seekle

+0

Sí. Esa es la documentación. A medida que descubres, no es preciso. –

Cuestiones relacionadas