2011-09-07 13 views
5

Forse questa è una domanda semplice, ma non riesco a trovare la risposta. Utilizzando XAML ho questo codice:come convertire il tipo di origine "System.Nullable <bool>" nel tipo di destinazione "bool"

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

così nel .cs lima che ho bisogno di ottenere il valore di questa casella di controllo: così ho:

res.IsInheriting = tbIsInheriting.IsChecked; 

, ma questo è un errore (non in grado di convertire il tipo di sorgente ' System.Nullable 'al tipo di destinazione' bool ').

+2

Dipende da cosa si vuole fare se la casella di controllo è nello stato "indeterminato". – Jon

risposta

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

CheckBox.IsChecked restituisce un bool? perché può essere una casella di controllo a tre vie. Se la casella di controllo è mai a tre vie, userei personalmente:

res.IsInheriting = tblsInheriting.IsChecked.Value; 

Che sarà un'eccezione se in qualche modo la tua casella di controllo è diventato tre vie senza di te aspettavo, ed è in stato indeterminato.

In caso contrario, se potrebbe essere a tre vie, vorrei utilizzare:

res.IsInheriting = tblsInheriting.IsChecked ?? defaultValue; 

dove defaultValue sarebbe probabilmente true o false a seconda di come si vuole lo stato "indeterminata" da tradurre.

+0

'??' è sicuramente la strada da percorrere. Un'altra opzione è scrivere un metodo di estensione per 'Nullable '. –

Problemi correlati