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);
            }
        }
    }

true設定されているフラグに応じて、以下をまたはに設定する必要がありますfalse

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

デバッグ時にこの値が正しく設定されていることを確認できますが、チェックボックスが画面にリストされているときは常にチェックされていません。

期待どおりにチェックするにはどうすればよいですか?

4

2 に答える 2

2

CheckBoxコンストラクターを呼び出すときに、チェックボックスをオンIsCheckedに設定IsCheckedPropertyします。次に、を使用してIsCheckedPropertyを再度設定するとBinding、最初の設定が上書きされます。

あなたの問題はバインディングのConverterと にあると思われますConverterParameter

于 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 に答える