Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据绑定单选按钮IsSelected仅工作一次_C#_Wpf_Data Binding_Mvvm_Radio Button - Fatal编程技术网

C# 数据绑定单选按钮IsSelected仅工作一次

C# 数据绑定单选按钮IsSelected仅工作一次,c#,wpf,data-binding,mvvm,radio-button,C#,Wpf,Data Binding,Mvvm,Radio Button,我在数据绑定方面有问题。我使用的是MVVM灯 当我在视图模型中的一个bool的setter上设置一个断点并选择相应的单选按钮时,调试器将停止,并且看起来一切正常 然后,当我继续时,选择另一个单选按钮并再次选择第一个单选按钮,调试器不会停止。出什么事了 我有两个单选按钮: <RadioButton Margin="5" Grid.Row="1" Content="Browser cookies" GroupName="loginmethod" IsChecked="

我在数据绑定方面有问题。我使用的是MVVM灯

当我在视图模型中的一个bool的setter上设置一个断点并选择相应的单选按钮时,调试器将停止,并且看起来一切正常

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

我有两个单选按钮:

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

我发现,在单选按钮上进行数据绑定时,为每个按钮指定不同的
GroupName
,这样它们就不会相互影响,然后只通过绑定处理每个单选按钮选项的设置和取消设置,这要容易得多。例如,您可以在viewmodel上只显示一个布尔值,将一个单选按钮绑定到该布尔值,然后将另一个绑定到同一个布尔值,但使用一个。或者将该属性设置为枚举,然后将每个单选按钮指定给该属性,但要使用。这样,您就可以在viewmodel上减少需要担心的属性


当你给单选按钮时,每次你更改一个属性时,相同的组名WPF都会试图弄乱其他属性,你会得到一些丑陋的循环和奇怪的行为。

嗨,RandomEngy,谢谢你的回答。不幸的是,这也不起作用。不管组名如何,setter只被调用一次。正如您所说,我删除了groupname,但是WPF似乎设置了名称隐式,因为行为没有改变。然后我设置了两个不同的组名。这导致在单击两个单选按钮后设置了两个单选按钮,无法再取消设置。这不仅仅是因为组名不同。您还需要将不同的单选按钮绑定到同一属性(其中一个属性上有反转转换器)。
   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);
        }
    }