我正在使用MVVM模式创建一个应用程序,并且我有一个包含ComboBox的视图。
<Controls:SettingsComboBox x:Name="Setting"
SelectedIndex="{Binding SteeringIndex, Mode=TwoWay}"
IsEnabled="{Binding SteerAttached, Mode=TwoWay}">
<ComboBoxItem Content="{Binding Path=on, Source={x:Static Localization:CultureResources.ObjectDataProvider}}"/>
<ComboBoxItem Content="{Binding Path=off, Source={x:Static Localization:CultureResources.ObjectDataProvider}}"/>
</Controls:SettingsComboBox>
因此SelectedIndex
和IsEnabled
绑定到视图模型,该模型从设置文件中检索值或从外部事件中获取值。
如果SelectedIndex
为0(打开)且IsEnabled
设置为false,则一切正常。如果SelectedIndex
为1(关闭)且IsEnabled
设置为false,则SelectedIndex
会以某种方式设置为-1,从而导致空组合框。
为什么会发生这种情况,我该如何解决?我可以在收到事件时将SelectedIndex
设置回来更改IsEnabled
属性,但是当它被禁用时仍会离开并清空组合框,这样就不能真正作为解决方案。
答案 0 :(得分:1)
在组合框上设置IsEnabled不会更改其SelectedIndex属性。代码中的某些内容(此处未显示)正在执行此操作,可能是您的VM。问题,为什么你为IsEnabled做双向绑定?你真的想在组合框上的IsEnabled改变时更新SteerAttached吗?
下面的代码让您可以使用启用/禁用组合框并更改所选索引。正如您所看到的,这些属性彼此独立。
<ComboBox
SelectedIndex="{Binding Path=Value, ElementName=_slider, Mode=TwoWay}"
IsEnabled="{Binding IsChecked, ElementName=_checkBox}">
<ComboBoxItem>AAA</ComboBoxItem>
<ComboBoxItem>BBB</ComboBoxItem>
<ComboBoxItem>CCC</ComboBoxItem>
</ComboBox>
<Slider Name="_slider" IsSnapToTickEnabled="True" TickFrequency="1" Minimum="0" Maximum="2" Width="30"/>
<CheckBox Name="_checkBox" />