C# 数据绑定单选按钮IsSelected仅工作一次
我在数据绑定方面有问题。我使用的是MVVM灯 当我在视图模型中的一个bool的setter上设置一个断点并选择相应的单选按钮时,调试器将停止,并且看起来一切正常 然后,当我继续时,选择另一个单选按钮并再次选择第一个单选按钮,调试器不会停止。出什么事了 我有两个单选按钮: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="
<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);
}
}