2011-09-07 89 views
5

也许这是一个简单的问题,但我找不到答案。使用XAML我有这样的代码:如何将源类型'System.Nullable <bool>'转换为目标类型'bool'

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

,所以我需要得到这个复选框的值: 所以我有:

res.IsInheriting = tbIsInheriting.IsChecked; 

,但是这是一个错误(不能将源类型“ System.Nullable'到目标类型'bool')。

+2

这取决于你想要做什么,如果复选框处于“不确定”状态。 – Jon

回答

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

CheckBox.IsChecked返回bool?,因为它可以是一个三路复选框。如果您的复选框从未三路,我会亲自使用:

res.IsInheriting = tblsInheriting.IsChecked.Value; 

这将抛出一个异常,如果莫名其妙的复选框已成为没有你期待它三路,而且是在不确定状态。

否则,如果可能是三路,我会用:

res.IsInheriting = tblsInheriting.IsChecked ?? defaultValue; 

其中defaultValue很可能会取决于你如何想的“不确定”状态被翻译truefalse

+0

'??'绝对是要走的路。另一个选择是为'Nullable '写一个扩展方法。 –

相关问题