WPF将Checkbox.IsChecked转换为int或字符串1或0

时间:2017-08-20 14:49:13

标签: c# wpf

因此对于Winforms来说,很容易做到这一点:

streamWriter.WriteLine(this.checkbox1.Checked ? "1" : "0");

但我怎么能在WPF中做到这一点? 我必须使用" .IsChecked"然后我收到消息,我无法转换bool?进入布尔。

我刚试过:

streamWriter.WriteLine(this.checkbox1.IsChecked ? "1" : "0");

哪个不起作用。

3 个答案:

答案 0 :(得分:2)

在WPF中,Checkbox.IsChecked属于Nullable类型。因此,您必须将代码修改为:

streamWriter.WriteLine((this.checkbox1.IsChecked == true) ? "1" : "0");

注意:如果您在?之后看到DataTypebool? abc,则表示abc可以null作为其值,默认情况下bool变量不接受null作为值。

示例:

对于int数据类型:

int variable = 0; //correct
int variable = null; //incorrect
int? variable = null; //correct
int? variable = 1; //correct

对于bool数据类型:

bool mybool = false; //correct
bool mybool = null; //incorrect
bool? mybool = null; //correct
bool? mybool = true; //correct

同样在bool? mybool = true;int? variable = 1;中,如果您还希望将这些变量的值检索为正确的boolint,则必须转换使用它们 分别为Convert.ToBooleanConvert.ToInt32

答案 1 :(得分:1)

CheckBoxIsChecked继承ToggleButtonToggleButton并非设计为"必须经过检查或取消选中"。 ToggleButton只是您可以切换的内容。对于复选框,如果您启用IsChecked,则IsThreeStates可以为空。

然后你必须决定当复选框处于第三状态时会发生什么。你想要它是1还是0?

streamWriter.WriteLine((this.checkbox1.IsChecked ?? false) ? "1" : "0");
                                                    ^^^^^

//如果您希望第三个州为" 1"

,请将此替换为true

如果您未启用IsThreeStates,则可以在true之后编写false??

答案 2 :(得分:0)

复选框属于可空类型。此外,在xaml中使用click事件。写完文件后别忘了调用Close()方法。