У меня есть ComboBox, содержимое которого может измениться. Проблема заключается в том, когда содержимое изменяется, 1) я теряю предыдущий selectedIndex, а 2) SelectedIndex установлен в -1. Мне хотелось бы решение MVVM, а не какое-то решение, связанное с кодом. Я могу установить значение SelectedIndex равным 0 при изменении содержимого, но -1 не является допустимым значением для моей модели.ComboBox SelectedIndex потерян при изменении контента
То, что я сделал как «трюк», состояло в том, чтобы установить свойство свойства, связанного с SelectedIndex, чтобы установить значение 0, когда значение установлено на -1. Итак, теперь у меня нет неправильной стоимости в моей модели. Но ComboBox не отображает «0» -й элемент, а пустой.
Что я могу сделать, чтобы мой ComboBox отображал первый элемент (индекс 0) при изменении его содержимого?
<ComboBox Name="WeeksComboBox" IsEditable="False"
ItemsSource="{Binding Weeks}"
SelectedIndex="{Binding WeekNumber}"
>
Недели - это свойство уведомления, которое представляет собой список строк. Он изменяется, когда я изменяю свойство Year. WeekNumber является уведомляющим свойством типа integer. Теперь, когда он установлен в -1, я устанавливаю соответствующий частный член на 0, чтобы избежать неправильного значения в моей модели.
Я подозреваю, что вы подменой, как будет установлен выбранный индекс -1. Отправьте код, в который вы привязываетесь, и где вы меняете контент. – Paparazzi
Когда вы говорите, что «изменилось время, когда меняют год», вы очищаете этот список - если это так, когда он получает значение -1, поскольку нет значений (пока вы не добавите новые значения). Если вы делаете ясный, то добавьте, вам нужно будет установить WeekNumber = 0 после добавления (я бы установил Public, а не частный). И я бы использовал и ObservavleCollection над списком. – Paparazzi
Использование ObservableCollection автоматически уведомляет об изменениях своих элементов (добавление, перемещение, удаление). Кроме того, если вы замените текущий выбранный элемент, ссылка на старую будет потеряна, поэтому индекс будет равен -1. Вы можете использовать небольшую ViewModel для представления этого WeekNumber, и если значение элемента изменяется, изменение является внутренним номером и уведомляет об этом. – JoanComasFdz