Как установить текст ComboBox в список выделенных элементов с разделителями-запятыми?

У меня есть wpf ComboBox, содержащий элементы CheckBox, и он позволяет пользователю выбирать несколько элементов.

Я хочу отобразить список выбранных элементов в виде разделенного запятыми текста в выпадающем списке после того, как пользователь выбрал элемент из выпадающего списка.

XAML:


    
        
            
                
            
        
    
 

Код:

var lstEnvironment = new List();
lstEnvironment.Add( new Environment() { Name = "Env1", IsSelected = false});
lstEnvironment.Add(new Environment() { Name = "Env2", IsSelected = false });
lstEnvironment.Add(new Environment() { Name = "Env3", IsSelected = false });
cmbEnvironment.ItemsSource = lstEnvironment;

Модель:

public class Environment
{
    public string Name { get; set; }
    public bool IsSelected { get; set; }
}

Как я могу это сделать?

1
nl ja de
Из-за поведения, которое вы хотите, не было бы лучшим решением, которое будет расширяться при щелчке ( Expander , Popup и т. Д.) С чем-то вроде ItemsControl или ListView , используемый для отображения ваших товаров? В противном случае вы можете получить странный выбор или открыть/закрыть поведение.
добавлено автор Rachel, источник
Каков реальный вопрос? (Я уверен, что вы просто не хотите знать, что да, кто-то, вероятно, реализовал аналогичную выкладку).
добавлено автор Wonko the Sane, источник
Вопрос заключается в том, как отображать выделенные элементы, разделенные запятой, как текст combobox. Благодарю.
добавлено автор developer, источник

2 ответы

Для будущих читателей: я рекомендую (бесплатно) wpf toolkit"> расширенный набор инструментов wpf для этого он включает CheckComboBox, который выполняет именно это.

0
добавлено

Из-за поведения, которое вы хотите, не было бы лучшим решением, которое будет расширяться при щелчке ( Expander , Popup и т. Д.) С чем-то вроде ItemsControl или ListView , используемый для отображения ваших товаров? В противном случае вы можете получить странный выбор или открыть/закрыть поведение.

Но в любом случае, лично я бы создал класс данных, содержащий:

string SelectedItems { get; set; }
ObservableCollection AvailableItems { get; set; }

И сделайте что-нибудь вроде этого:

и добавьте уведомления PropertyChange в класс Enviornment , чтобы вы могли сделать что-то вроде этого:

foreach(var item in AvailableItems)
    item.PropertyChanged += Environment_PropertyChanged;

...

void Environment_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "IsSelected")
        SelectedItems = string.Join(",", 
            availableItems.Where(p => p.IsSelected)
            .Select(p => p.Name).ToArray());
}

(Я не могу вспомнить, является ли ToArray() частью фреймворка или нет, однако если нет, то это answer имеет хороший метод расширения, позволяющий легко преобразовывать список в массив, чтобы вы могли использовать его в string.Join )

However using your current setup you could also just add some code-behind to the CheckBox.CheckChanged or ComboBox.SelectionChanged to cast cmbEnvironment.ItemsSource to List, build a comma-delimited string of the Checked items, then set cmbEnvironment.Text equal to your comma-delimited string.

0
добавлено
Спасибо за ответ. Я использовал элемент управления расширителя с listview, чтобы добиться того же.
добавлено автор developer, источник
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

CSS — русскоговорящее сообщество
CSS — русскоговорящее сообщество
1 502 участник(ов)

Сообщество любителей CSS Возникли проблемы с CSS? – пиши сюда, обсудим и предложим самое лучшее решение Работа: @css_ru_jobs Правила: https://teletype.in/@css_ru/r1EWtQ2w7 Приходите в наши чаты @javascript_ru и @frontend_ru Флуд: @css_flood

Чат — Типичный Верстальщик
Чат — Типичный Верстальщик
1 080 участник(ов)

Основной канал: @tpverstak Обратная связь: @annblok Все ссылки на соц.сети проекта: http://taplink.cc/tpverstak ПРАВИЛА ЧАТА — https://teletype.in/@annblok/BygPgC3E7

Веб-Технологи: UI/UX, Вёрстка, Фронтенд
Веб-Технологи: UI/UX, Вёрстка, Фронтенд
167 участник(ов)

Всё про веб-дизайн и вёрстку. А также: HTML, CSS, флекс и бутстрапы, шаблонизаторы, препроцессоры, методологии, аглифаеры, улучшаторы и обфускаторы. Обсуждаем темы юзабилити, устраиваем А/В тесты лендингов, и проводим аудит.

DTP :: @DTPublish
DTP :: @DTPublish
147 участник(ов)

Обсуждаемые темы: полиграфия, препресс, верстка, дизайн, иллюстрации, скрипты, плагины. Канал - @DTPublishing

css_jobs
css_jobs
26 участник(ов)

Чат для вопросов по css и html: @css_ru Флуд: @css_flood Канал с вакансиями и резюме: @css_jobs_feed

css_флуд
css_флуд
10 участник(ов)