我遇到数据绑定问题。我正在使用MVVM Light。
当我在视图模型中的某个bool的setter上设置断点并选择相应的单选按钮时,调试器停止并且所有看起来都很好。
然后当我继续时,选择另一个单选按钮并再次选择第一个单选按钮,调试器没有停止。出了什么问题?
我有两个两个radiobuttons:
<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}"/>
我在他的视图模型中将它们绑定到两个单独的bool,如下所示:
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);
}
}
答案 0 :(得分:0)
我发现当你在单选按钮上进行数据绑定时,为每个按钮设置一个不同的GroupName
会更容易,因此它们不会相互影响,然后处理每个单选按钮选项的设置和取消设置仅通过绑定。例如,您可以在viewmodel上只显示一个布尔值,让一个单选按钮绑定到该bool,然后让另一个绑定到同一个布尔,但使用inverse boolean converter。或者将属性设为枚举,然后将每个单选按钮分配给该属性,但使用enum to boolean converter。然后,您可以在viewmodel上担心更少的属性。
当你给单选按钮时,同样的GroupName WPF会在每次更改一个时尝试弄乱其他属性,你可能会遇到一些丑陋的循环和奇怪的行为。