我正在动态生成CheckBoxes,我想根据应该选择的选项来检查它们。
我有以下XAML:
<StackPanel>
<StackPanel x:Name="ArmingPanel" />
</StackPanel>
以下代码:
private void AddCheckBoxes(OptionsVM options)
{
var converter = new FlagsEnumValueConverter();
foreach (Arming arming in Enum.GetValues(typeof(Arming)))
{
if (arming != Arming.None)
{
var binding = new Binding()
{
Path = new PropertyPath("Arming"),
Converter = converter,
ConverterParameter = arming
};
var checkBox = new CheckBox()
{
Content = arming.ToString(),
IsChecked = (options.Options.Arming & arming) != Arming.None
};
checkBox.SetBinding(CheckBox.IsCheckedProperty, binding);
ArmingPanel.Children.Add(checkBox);
}
}
}
根据已设置的标志,以下内容应设置为true
或false
:
IsChecked = (options.Options.Arming & arming) != Arming.None
我可以在调试时看到正确设置此值,但是当屏幕上列出复选框时,它们总是未选中。
如何按预期检查它们?
答案 0 :(得分:2)
在致电CheckBox
构建器时,您需要设置IsChecked
,这会在复选框上设置IsCheckedProperty
。然后,您使用IsCheckedProperty
再次设置Binding
,以便覆盖第一个设置。
我怀疑您的问题出在Converter
和绑定中的ConverterParameter
答案 1 :(得分:-1)
编辑:这不是OP的问题,但我觉得值得一提。
看来你正在检查枚举标志,正确的布尔表达式是:
(options.Options.Arming & arming) == arming
如果此表达式返回true
,则options.Options.Arming
包含存储在arming
正确定义enum Arming
成员也很重要!