强制单选按钮仅在绑定值实际更改时才更改
本文关键字:单选按钮 绑定 | 更新日期: 2023-09-27 18:34:51
我有一个奇怪的情况。问题是我有 3 个单选按钮,它们绑定到我的视图模型的有效值属性。
<StackPanel Grid.Column="2" Orientation="Horizontal" Margin="5,0,0,0">
<StackPanel.Visibility>
<MultiBinding Converter="{StaticResource MultiBoolToVisibilityHidden}">
<Binding Path="IsSelected" RelativeSource="{RelativeSource AncestorType=telerik:RadListBoxItem}"/>
<Binding Path="Criterion.IsOverridable"/>
<Binding Path="DataContext.CanOverrideEvaluation" ElementName="ThisInformationControl"/>
</MultiBinding>
</StackPanel.Visibility>
<telerik:RadRadioButton Content="Y" IsChecked="{Binding EffectiveValue, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static utilities:Ternary.TRUE}, Mode=OneWay}" Style="{StaticResource EmptyRadioButtonStyle}"
Command="{Binding OverrideValueCommand}" CommandParameter="{x:Static utilities:Ternary.TRUE}" Margin="2,1" Width="16" VerticalAlignment="Center"/>
<telerik:RadRadioButton Content="?" IsChecked="{Binding EffectiveValue, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static utilities:Ternary.UNKNOWN}, Mode=OneWay}" Style="{StaticResource EmptyRadioButtonStyle}"
Command="{Binding OverrideValueCommand}" CommandParameter="{x:Static utilities:Ternary.UNKNOWN}" Margin="2,1" Width="16" VerticalAlignment="Center"/>
<telerik:RadRadioButton Content="N" IsChecked="{Binding EffectiveValue, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static utilities:Ternary.FALSE}, Mode=OneWay}" Style="{StaticResource EmptyRadioButtonStyle}"
Command="{Binding OverrideValueCommand}" CommandParameter="{x:Static utilities:Ternary.FALSE}" Margin="2,1" Width="16" VerticalAlignment="Center"/>
</StackPanel>
问题是这个。假设我的视图模型有效值为"Y"。我点击"N"按钮。但是基于某些条件,我实际上并没有将有效值设置为"N",它仍然是"Y"。我遇到的问题是现在"N"看起来被选中,即使视图模型仍然说值是"Y"。我该怎么做才能确保我的单选按钮严格侦听视图模型的值?
我目前的解决方法是强制更改有效值的属性,但我觉得这是一种黑客攻击。
谢谢
我认为
答案在于您的单选按钮绑定。请注意,您已将它们设置为 OneWay,但您说根据某些条件将值保留为"Y"。WPF 控件如何知道你已拒绝 UI 更改?
我建议将绑定模式更改为 TwoWay,并且可能还会在绑定中包含 UpdateSourceTrigger=PropertyChanged。然后,您的代码隐藏和 UI 可以相互"以两种方式"传达单选按钮的适当状态。