C# 如何动态选中复选框?
我正在动态生成复选框,并希望根据应选择的选项对其进行检查 我有以下XAML:C# 如何动态选中复选框?,c#,wpf,xaml,checkbox,C#,Wpf,Xaml,Checkbox,我正在动态生成复选框,并希望根据应选择的选项对其进行检查 我有以下XAML: <StackPanel> <StackPanel x:Name="ArmingPanel" /> </StackPanel> 根据已设置的标志,以下各项应设置为true或false: IsChecked = (options.Options.Arming & arming) != Arming.None 我可以在调试
<StackPanel>
<StackPanel x:Name="ArmingPanel" />
</StackPanel>
根据已设置的标志,以下各项应设置为true
或false
:
IsChecked = (options.Options.Arming & arming) != Arming.None
我可以在调试时看到此值设置正确,但当屏幕上列出复选框时,它们总是未选中
我如何才能让他们按预期检查?编辑:这不是对OP问题的质疑,但我觉得值得一提 如果您正在检查枚举标志,则正确的布尔表达式为:
(options.options.Arming&Arming)=报警
如果此表达式返回true
,则options.options.Arming
包含存储在Arming
正确定义
enum Arming
成员也很重要 在调用您的复选框
构造函数时,您设置了IsChecked
,它在复选框上设置了IsCheckedProperty
。然后使用绑定再次设置IsCheckedProperty
,因此第一个设置被覆盖
我怀疑您的问题在于绑定中的转换器
和转换器参数
,IsChecked
-属性是由您的绑定设置的。有消息告诉我您的绑定已断开。如果要将IsChecked属性绑定到某个对象,则不应手动设置它。正如Matten所说,IsChecked
是在代码中设置后立即由绑定设置的。检查FlagsEnumValueConverter
,如果它返回Nullable,OP在调试模式下运行时会说该值设置正确。但他在手动设置属性后设置了该属性的数据绑定,这将覆盖先前设置的“正确”值。因此,此enum Arming
成员的定义是正确的。我们不能谈论Arming
的定义或Arming的值。没有一个,我的“答案”应该是注释,但太长了。我应该清楚地表明,我并不是在回答真正的问题。对于否决票,你希望我删除这个吗?你不觉得这是对给出的示例代码的重要批评吗?我不是反对者,但考虑到这不是OP的问题,我不确定这篇文章是否对这个问题有任何价值。你是否删除它取决于你认为这篇文章有多重要。是的,我承认否决票是值得的。我将编辑以明确我的意图,并希望将来这些信息对某些人有价值。
IsChecked = (options.Options.Arming & arming) != Arming.None