0

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

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

我怎样才能让它们按预期进行检查?

4

2 回答 2

2

在调用您的CheckBox构造函数时,您设置了复选框IsChecked,它设置IsCheckedProperty了复选框。然后,您IsCheckedProperty使用 a 再次设置Binding,因此第一个设置被覆盖。

我怀疑您的问题ConverterConverterParameter在 Binding 中

于 2012-04-10T11:09:56.847 回答
-1

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

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

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

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

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

于 2012-04-10T11:08:16.643 回答