0

データバインディングに問題があります。MVVM Light を使用しています。

ビュー モデルの bool の 1 つのセッターにブレークポイントを設定し、対応するラジオ ボタンを選択すると、デバッガーが停止し、すべて正常に表示されます。

次に、続行して他のラジオ ボタンを選択し、最初のラジオ ボタンをもう一度選択すると、デバッガーは停止しません。何がうまくいかないのですか?

私は2つのラジオボタンを2つ持っています:

            <RadioButton  Margin="5" Grid.Row="1" Content="Browser cookies" GroupName="loginmethod" IsChecked="{Binding IsBrowserCookiesChecked}"/>
            <RadioButton  Margin="5" Grid.Row="2" Content="Username + password" GroupName="loginmethod" IsChecked="{Binding IsUsernamePasswordChecked}"/>

次のように見えるビューモデルで、それらを2つの別々のブールにバインドしました。

   public const string IsUsernamePasswordCheckedPropertyName = "IsUsernamePasswordChecked";

    private bool _isUsernamePasswordChecked = false;
    public bool IsUsernamePasswordChecked
    {
        get
        {
            return _isUsernamePasswordChecked;
        }

        set
        {
            if (_isUsernamePasswordChecked == value)
            {
                return;
            }

            RaisePropertyChanging(IsUsernamePasswordCheckedPropertyName);
            _isUsernamePasswordChecked = value;
            RaisePropertyChanged(IsUsernamePasswordCheckedPropertyName);
        }
    }

    public const string IsBrowserCookiesCheckedPropertyName = "IsBrowserCookiesChecked";

    private bool _isBrowserCookiesChecked = true;

    public bool IsBrowserCookiesChecked    
    {
        get
        {
            return _isBrowserCookiesChecked;
        }

        set
        {
            if (_isBrowserCookiesChecked == value)
            {
                return;
            }

            RaisePropertyChanging(IsBrowserCookiesCheckedPropertyName);
            _isBrowserCookiesChecked = value;
            RaisePropertyChanged(IsBrowserCookiesCheckedPropertyName);
        }
    }
4

1 に答える 1

0

ラジオ ボタンでデータバインディングを行っている場合、各ボタンに異なるGroupNameものを与えて相互に影響を与えないようにし、バインディングのみを介して各ラジオ ボタンの選択の設定と設定解除を処理する方がはるかに簡単であることがわかりました。たとえば、ビューモデルでブール値を 1 つだけ公開し、1 つのラジオ ボタンをそのブール値にバインドしてから、もう 1 つのラジオ ボタンを同じものにバインドさせることができますが、逆ブール値コンバーターを使用します。または、プロパティを列挙型にしてから、各ラジオ ボタンをそのプロパティに割り当てますが、列挙型からブール値へのコンバーターを使用します。そうすれば、ビューモデルで心配するプロパティが少なくなるという追加の利点があります。

ラジオ ボタンに同じ GroupName を指定すると、WPF は他のプロパティを変更するたびに他のプロパティをいじろうとし、醜いループや奇妙な動作が発生する可能性があります。

于 2013-10-23T23:35:30.850 に答える