未选中的WPF单选按钮

3
我有两个单选按钮。
其中一个(rb1)绑定到我的ViewModel的一个属性。如果该属性为true,则在应用程序加载时选中rb1。如果该属性为false,则rb1未选中(没错)。
但是,在最后一种情况下,两个单选按钮都未被选中,我需要第二个单选按钮(rb2)在属性为false时被选中。我该如何做?

所以,您有两个单选按钮。这两个单选按钮都绑定到同一个属性上吗?当属性值为true时,您需要rb1被选中且rb2未选中,而当属性值为false时,您需要rb1未选中且rb2被选中? - decyclone
你使用的是哪个版本的.NET?在.NET 4中修复了与数据绑定单选按钮相关的问题。 - Joe White
1个回答

0
你遇到的问题是数据绑定“丢失”了。让我引用Matt Thalman的话:

点击会正确地更改按钮的UI状态(例如,点击Bar会取消选中Foo并选中Bar)。但是我注意到,如果IsFoo和IsBar的基础值在此之后发生了变化,则按钮的IsChecked状态不会更新。使用Snoop工具,我发现IsChecked状态在单击其中一个按钮后已手动设置。一旦依赖属性被手动设置,它就会失去其绑定。这就是为什么当绑定到的属性被更新时,IsChecked状态没有被更改的原因。

一个简单的解决方案是子类化RadioButton类:
public class DataBoundRadioButton : RadioButton
{
     protected override void OnChecked(RoutedEventArgs e)
     {
          // Do nothing. This will prevent IsChecked from being manually set and overwriting the binding.
     }

     protected override void OnToggle()
     {
          // Do nothing. This will prevent IsChecked from being manually set and overwriting the binding.
     }
}

请参阅此博客文章以获取更多详细信息。


据我所知,这个 bug 在 .NET 4.0 中已经修复了 -- 现在你应该能够绑定 RadioButton 的值而不会遇到这个问题。 - Joe White

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接