如何动态检查CheckBoxes?

时间:2012-04-10 10:58:17

标签: c# wpf xaml checkbox

我正在动态生成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);
            }
        }
    }

根据已设置的标志,以下内容应设置为truefalse

IsChecked = (options.Options.Arming & arming) != Arming.None

我可以在调试时看到正确设置此值,但是当屏幕上列出复选框时,它们总是未选中。

如何按预期检查它们?

2 个答案:

答案 0 :(得分:2)

在致电CheckBox构建器时,您需要设置IsChecked,这会在复选框上设置IsCheckedProperty。然后,您使用IsCheckedProperty再次设置Binding,以便覆盖第一个设置。

我怀疑您的问题出在Converter和绑定中的ConverterParameter

答案 1 :(得分:-1)

编辑:这不是OP的问题,但我觉得值得一提。

看来你正在检查枚举标志,正确的布尔表达式是:

(options.Options.Arming & arming) == arming

如果此表达式返回true,则options.Options.Arming包含存储在arming

中的标记

正确定义enum Arming成员也很重要!