【问题标题】:DataBinding RadioButton IsSelected only works onceDataBinding RadioButton IsSelected 只工作一次
【发布时间】:2013-11-02 10:45:14
【问题描述】:

我遇到了数据绑定问题。我正在使用 MVVM Light。

当我在视图模型中的一个布尔值的设置器上设置断点并选择相应的单选按钮时,调试器停止并且一切正常。

然后当我继续时,选择另一个单选按钮并再次选择第一个单选按钮,调试器不会停止。出了什么问题?

我有两个两个单选按钮:

            <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}"/>

我已在我的视图模型中将它们绑定到两个单独的布尔值,如下所示:

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

【问题讨论】:

    标签: c# wpf data-binding mvvm radio-button


    【解决方案1】:

    我发现当您对单选按钮进行数据绑定时,给每个按钮一个不同的GroupName 会容易得多,这样它们就不会相互影响,然后通过绑定处理每个单选按钮选项的设置和取消设置只要。例如,您可以在视图模型上仅公开一个布尔值,将一个单选按钮绑定到该布尔值,然后将另一个绑定到同一个,但使用inverse boolean converter。或者将属性设为枚举,然后将每个单选按钮分配给该属性,但使用enum to boolean converter。然后,您可以在视图模型上担心更少的属性。

    当您为单选按钮提供相同的 GroupName 时,每次您更改一个属性时,WPF 都会尝试弄乱其他属性,您可能会遇到一些丑陋的循环和奇怪的行为。

    【讨论】:

    • 嗨 RandomEngy,感谢您的回答。不幸的是,这也不起作用。无论组名如何,设置器只被调用一次。正如你所说,我删除了组名,但随后 WPF 似乎隐含地设置了名称,因为行为没有改变。然后我设置了两个不同的组名。这导致两个单选按钮都在单击后设置,并且无法再取消设置。
    • 不仅仅是组名不同。您还需要将不同的单选按钮绑定到相同的属性(其中一个带有反转转换器)。
    猜你喜欢
    • 1970-01-01
    • 2017-01-06
    • 2018-06-22
    • 2015-09-18
    • 2013-12-31
    • 1970-01-01
    • 2013-09-28
    • 2013-03-30
    • 2015-06-04
    相关资源
    最近更新 更多