Из-за поведения, которое вы хотите, не было бы лучшим решением, которое будет расширяться при щелчке ( 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.