У меня есть приложение WinForms, которое содержит выпадающий список (comboBoxMain) и несколько других элементов управления. comboBoxMain привязан к массиву из 5 объектов (экземпляров класса данных, которые содержат несколько свойств) и используется для выбора , свойства которого из 5 объектов будут отображаться в других элементах управления пользовательского интерфейса. Как только пользователь выбрал нужные значения во всех элементах управления в моей форме, у меня есть кнопка, которая скопирует эти значения в каждый из 4 других экземпляров класса данных. Некоторые из элементов управления в моей форме могут влиять на видимость, состояние включения / выключения или выбранное значение других элементов управления. Например, если пользователь выберет значение «Отключено» в одном из выпадающих списков (назовем его comboBoxStatus), это приведет к отключению трех других элементов управления, проверке флажка и изменению заголовка группы. Проблема с этой функциональностью может быть описана следующим сценарием:
Пользователь выбирает значение «Disabled» в comboBoxStatus (которое затем запускает код в своем обработчике событий SelectionChangeCommitted (), который изменяет другие элементы управления, как я описал выше).
Затем пользователь нажимает кнопку, чтобы скопировать текущие выбранные значения во всех элементах управления в другие 4 объекта данных.
Наконец, пользователь выбирает один из 4 других объектов данных из comboBoxMain.
Когда это происходит, у меня есть обработчик события SelectionChangeCommitted () для comboBoxMain, который запускает и смотрит на SelectedValue в comboBoxStatus. К сожалению, он видит значение по умолчанию для свойства поддержки вместо значения «Отключено», которое было скопировано в свойство ранее. У меня есть код в конце comboBoxMain_SelectionChangeCommitted (), который должен проверять значения этих элементов управления, которые могут повлиять на другие вещи в пользовательском интерфейсе, и убедиться, что все обновляется соответствующим образом. Это, очевидно, не происходит, так как он не видит правильное значение. Если я переместил этот код из обработчика событий и вручную вызвал его нажатием кнопки после того, как пользовательский интерфейс связал данные для выбранного в данный момент объекта данных, тогда он заработает. Я могу только догадываться, что это происходит, потому что привязки не обновляются до тех пор, пока не завершится comboBoxMain_SelectionChangeCommitted ()?
Я надеюсь, что все имеет смысл. Я играл с этим часами, но еще не до конца понял, что происходит или как лучше всего решить эту проблему. Если у вас есть какие-либо мысли, я был бы рад услышать их Спасибо за чтение!