WPF ComboBox SelectedIndex изменяется, когда IsEnabled имеет значение false - PullRequest
0 голосов
/ 29 сентября 2010

Я создаю приложение, используя шаблон 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, но это все еще оставляет и пустой комбинированный список, когда он отключен, так что на самом деле это не считается решением.

1 Ответ

1 голос
/ 29 сентября 2010

Установка IsEnabled в выпадающем списке не изменяет его свойство SelectedIndex. Что-то в вашем коде (не показано здесь) делает это, возможно, ваша виртуальная машина. Вопрос, почему вы сделали две привязки для IsEnabled? Вы действительно хотите обновлять SteerAttached всякий раз, когда IsEnabled в поле со списком изменяется?

Код ниже позволяет вам поиграть с включением / отключением комбинированного списка и изменением выбранного индекса. Как видите, эти свойства работают независимо друг от друга.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...