Общий раскрывающийся список для нескольких ComboBox (каждый элемент в списке может быть занят по отдельности) - PullRequest
0 голосов
/ 10 октября 2019

Мне нужно заново создать общий раскрывающийся список, в котором каждый элемент может быть выбран только одним элементом управления за раз. Самый близкий пример, который я могу вспомнить, - это выбор цвета игрока в таких играх, как «Генералы» и «Возраст империй» (многопользовательская игра).

Например, есть список:

{"- Нет- "," Синий "," Красный "," Желтый "и т. Д.}

Существует четыре комбинированных списка. Каждый из них начинается как "- Нет -". Если ComboBoxA принимает «Синий», ни один другой ComboBox не должен иметь «Синий» в своем списке. Хотя ComboBoxA все еще должен иметь "Blue" в своем списке. Если ComboBoxA выбирает другую опцию, все остальные ComboBox теперь должны снова иметь «Синий». То же самое с красным, желтым и т. Д.

Есть идеи, как этого добиться? MVVM предпочтительнее, но не обязателен.

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Основываясь на ответах на другой мой вопрос, частично на ответ Хермана и большом количестве настроек, я пришел к использованию многозначного преобразователя. Его метод преобразования следующий:

ObservableCollection<WorksheetColumn> worksheets = new ObservableCollection<WorksheetColumn>(values[0] as IEnumerable<WorksheetColumn>);
ComboBox combo = values[1] as ComboBox;
WorksheetColumn selected = combo.SelectedItem as WorksheetColumn;
int keepColumn = selected.ID;
return worksheets.Where(header => header.ID == 0 || header.Selected == false || header.ID == keepColumn);
0 голосов
/ 10 октября 2019

Вы можете создать класс, скажем: цвета. Этот класс имеет минимум 2 свойства «Имя» для цвета и логическое «Выбрано», если этот цвет выбран. После этого вы создаете класс List of Colors. Вы помещаете метод в этот класс списка: GetColors (exeptColor). ExeptColor является фактическим выбранным значением Combobox. Метод GetColors возвращает список только тех цветов, которые не выбраны.

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