我有点奇怪的情况。问题是我有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的值?
我当前的解决方法是强制某个属性改变了有效值,但我觉得这有点像黑客。
由于
答案 0 :(得分:1)
我认为答案取决于您的单选按钮绑定。请注意,您已将它们设置为OneWay,但您说根据某些条件,您将值保持为&#39; Y&#39;。 WPF控件如何知道您已拒绝UI更改?
我建议将绑定模式更改为TwoWay,也可以在绑定中包含UpdateSourceTrigger = PropertyChanged。然后你的代码和UI可以通过两种方式进行沟通。关于单选按钮的适当状态应该是什么。