C# WPF Radiobutton双向绑定总是导致两个属性调用。如何区分?
我有几个单选按钮组合在一个组中,因此只能检查一个。单选按钮绑定到布尔属性 这非常有效,我的程序会对这些属性的更改做出反应 假设选择了C# WPF Radiobutton双向绑定总是导致两个属性调用。如何区分?,c#,wpf,radio-button,C#,Wpf,Radio Button,我有几个单选按钮组合在一个组中,因此只能检查一个。单选按钮绑定到布尔属性 这非常有效,我的程序会对这些属性的更改做出反应 假设选择了optA。接下来,我选择optB,将PropertyB的值设置为true,我的程序会做出相应的反应。但是,此时,optA和optB均为真,直到单选按钮组将optA更新为假,再次触发我的“IsSelected”事件 我认为这是完全正确的行为。。。 但我如何区分来自用户的更改和来自组的自动更改 编辑:代码 <RadioButton Name="featureChe
optA
。接下来,我选择optB
,将PropertyB
的值设置为true,我的程序会做出相应的反应。但是,此时,optA
和optB
均为真,直到单选按钮组将optA
更新为假,再次触发我的“IsSelected”事件
我认为这是完全正确的行为。。。
但我如何区分来自用户的更改和来自组的自动更改
编辑:代码
<RadioButton Name="featureCheckBox" GroupName="featureRadioButtonGroup" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" />
public bool IsSelected {
get{ return _isSelected; }
set { PropertyChanged.ChangeAndNotify(ref _isSelected, value, () => IsSelected); }
}
公选学校{
获取{return}isSelected;}
设置{PropertyChanged.ChangeAndNotify(ref isSelected,value,()=>isSelected);}
}
首先回答您的问题。
按如下所示更改IsSelected属性的set部分。(当然,您必须为if语句编写实际代码)
您可以只侦听假值,但首先必须将任意选项设置为true。或者,您可以只侦听真值并忽略所有假值,这意味着您将遇到多个属性为真的问题,直到组框将旧选项更新为假
现在来听听建议。
一个更好的模式是这个
,但不要将其分组。(对它们进行分组会导致UI仅强制选择一个。这不利于UI和业务逻辑的分离。)
任何代码。)
我想你可以根据它的价值来区分它
True
始终由用户设置,因为您无法取消选择收音机按钮,false
始终由另一个值设置为True
这在一定程度上回答了我的问题。但是,我在运行时生成单选按钮,因此无法创建固定属性。尽管如此,我还是删除了分组并创建了一个静态的“lastchanged”属性,其中包含对设置为true的最后一个单选按钮的引用。如果发生这种情况,我将所有其他设置为false。所有这些都由模型处理。这也是解决WPF单选按钮分组错误的一个好方法,该错误似乎在今天仍然存在。@user1168261我很高兴它帮助了您。不过,我认为单选按钮分组的功能并不是一个真正的bug。它归结为您是否希望UI强制执行单个选择。在一个非常小的项目中,所有东西都是UI背后的代码,只需将单选按钮分组,让框架来处理它,而不是编写代码,这是非常方便的。我没有说他的行为是一个bug。我指的是这个真正的bug:
public bool IsSelected
{
get{ return _isSelected; }
set
{
//If two options are true wait for the second change of values
//You will now only get One notification per change.
if (twoOptions are selected) return;
else PropertyChanged.ChangeAndNotify(ref _isSelected, value, () => IsSelected);
}
}