2011-09-07 5 views
5

Peut-être que c'est une question simple, mais je ne trouve pas la réponse. En utilisant XAML J'ai ce code:comment convertir le type de source 'System.Nullable <bool>' en type de cible 'bool'

<CheckBox Grid.Column="2" Grid.Row="3" Height="23" HorizontalAlignment="Left" Name="tbIsInheriting" VerticalAlignment="Top" Width="191" Margin="0,4,0,0" /> 

donc dans le fichier .cs je dois obtenir la valeur de cette option: j'ai donc:

res.IsInheriting = tbIsInheriting.IsChecked; 

mais ceci est une erreur (ne peut pas convertir le type de source ' System.Nullable 'pour cibler le type' bool ').

+2

Cela dépend de ce que vous voulez faire si la case à cocher est dans l'état "indéterminé". – Jon

Répondre

15
tblsInheriting.IsChecked.GetValueOrDefault(); 
3
if (tbIsInheriting.IsChecked.HasValue == true) 
    res.IsInheriting = tbIsInheriting.IsChecked.Value; 
9

CheckBox.IsChecked retourne un bool? car il peut être une case à cocher à trois voies. Si votre case à cocher est jamais trois voies, j'utiliseriez personnellement:

res.IsInheriting = tblsInheriting.IsChecked.Value; 

Cela va lancer une exception si en quelque sorte votre case à cocher est devenu trois voies sans vous attendre, et est à l'état indéterminé.

Sinon, si elle pourrait être à trois voies, je l'utilise:

res.IsInheriting = tblsInheriting.IsChecked ?? defaultValue; 

defaultValue serait probablement true ou false selon la façon dont vous voulez que l'état « indéterminé » à traduire.

+0

'' '' est certainement le chemin à parcourir. Une autre option consiste à écrire une méthode d'extension pour 'Nullable '. –

Questions connexes