强制单选按钮仅在绑定值实际更改时才更改

本文关键字:单选按钮 绑定 | 更新日期: 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 可以相互"以两种方式"传达单选按钮的适当状态。