2013-10-23 23 views
0

我有一个数据绑定的问题。我正在使用MVVM Light。DataBinding RadioButton IsSelected只能工作一次

当我在我的视图模型中的一个布尔的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}"/> 

我已将他们包围在我的视图模型两个独立的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

我发现,当你在做数据绑定在单选按钮上,为每个按钮分配一个不同的GroupName更容易,因此它们不会互相影响,然后通过绑定处理每个单选按钮选项的设置和取消设置。例如,您可以在视图模型上仅显示一个布尔值,将一个单选按钮绑定到该布尔型,然后让另一个绑定到同一个布尔型,但使用inverse boolean converter。或者使属性成为枚举,然后将每个单选按钮分配给该属性,但是使用enum to boolean converter。那么你有更少的属性需要担心你的视图模型的额外好处。

当你给单选按钮时,相同的GroupName WPF将尝试在每次更改其他属性时混淆其他属性,并且可能会出现一些丑陋的循环和奇怪的行为。

+0

嗨RandomEngy,谢谢你的回答。不幸的是,这也不起作用。无论组名如何,setters只被调用一次。我像你说的那样删除了组名,但是WPF设置了它的名字隐含性,因为行为没有改变。然后我设置了两个不同的组名。这导致两个单选按钮在双击之后设置,并且无法再解除。 – MPL

+0

它不只是有不同的组名。您还需要将不同的单选按钮绑定到相同的属性(使用一个反转转换器)。 – RandomEngy