强制RadioButtons仅在绑定值实际更改时才更改

时间:2016-02-15 17:29:41

标签: c# wpf mvvm telerik

我有点奇怪的情况。问题是我有3个radiobuttons,它们绑定到我的viewmodel的EffectiveValue属性。

   <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>

问题是这个。假设我的ViewModel有效值为'Y'。我点击“N”按钮。但是基于某些条件,我实际上并没有将EffectiveValue设置为'N'并且它仍然是'Y'。我遇到的问题是现在'N'看起来已被选中,即使视图模型仍然表示该值为'Y'。我该怎么做才能确保我的radiobuttons严格监听viewmodel的值?

我当前的解决方法是强制某个属性改变了有效值,但我觉得这有点像黑客。

由于

1 个答案:

答案 0 :(得分:1)

我认为答案取决于您的单选按钮绑定。请注意,您已将它们设置为OneWay,但您说根据某些条件,您将值保持为&#39; Y&#39;。 WPF控件如何知道您已拒绝UI更改?

我建议将绑定模式更改为TwoWay,也可以在绑定中包含UpdateSourceTrigger = PropertyChanged。然后你的代码和UI可以通过两种方式进行沟通。关于单选按钮的适当状态应该是什么。