ToolStripCombobox.SelecrededItem изменение не распространяется на обязательный источник
-
02-10-2019 - |
Вопрос
Мое связывание настроено как это:
_selectXAxisUnitViewModelBindingSource = new BindingSource();
_selectXAxisUnitViewModelBindingSource.DataSource = typeof(SelectXAxisUnitViewModel);
_selectedUnitComboBoxBindingSource = new BindingSource();
_selectedUnitComboBoxBindingSource.DataSource = _selectXAxisUnitViewModelBindingSource;
_selectedUnitComboBoxBindingSource.DataMember = "AvailableUnits";
_selectedUnitComboBox.ComboBox.DataSource = _selectedUnitComboBoxBindingSource;
_selectedUnitComboBox.ComboBox.DisplayMember = String.Empty;
_selectedUnitComboBox.ComboBox.ValueMember = String.Empty;
_selectedUnitComboBox.ComboBox.DataBindings.Add("SelectedItem",
_selectXAxisUnitViewModelBindingSource,
"SelectedUnit", true, DataSourceUpdateMode.OnPropertyChanged);
// this is a bug in the .Net framework: http://connect.microsoft.com/VisualStudio/feedback/details/473777/toolstripcombobox-nested-on-toolstripdropdownbutton-not-getting-bindingcontext
_selectedUnitComboBox.ComboBox.BindingContext = this.BindingContext;
Свойство «AttaceUnunits» - это коллекция строк, а «Selectionunit» - это свойство строки. Теперь раскрывающийся список заполняется, как и ожидалось, но когда я выбираю и элемент в списке, изменение не распространяется на источник связывания. Любая идея, что я делаю не так?
Обновлять:
Я создал небольшой тестовый проект, и эта проблема возникает, когда добавляю панель инструментов в качестве подпункта другого настроителя. Если я добавлю панель инструментов напрямую в меню, все работает нормально. BindingContext не назначается на ToolStripCombobox при добавлении в качестве подпункта (см. Мой кодовый комментарий), и мое исправление, похоже, не делает то, что нужно, чтобы получить это на работу.
Нет правильного решения
Другие советы
Вы можете изменить
_selectXAxisUnitViewModelBindingSource.DataSource = typeof(SelectXAxisUnitViewModel);
К
_selectXAxisUnitViewModelBindingSource.DataSource = new SelectXAxisUnitViewModel();