Вопрос разработки WinForms о привязке данных и изменении элементов управления пользовательского интерфейса - PullRequest
0 голосов
/ 07 августа 2011

У меня есть приложение WinForms, которое содержит выпадающий список (comboBoxMain) и несколько других элементов управления. comboBoxMain привязан к массиву из 5 объектов (экземпляров класса данных, которые содержат несколько свойств) и используется для выбора , свойства которого из 5 объектов будут отображаться в других элементах управления пользовательского интерфейса. Как только пользователь выбрал нужные значения во всех элементах управления в моей форме, у меня есть кнопка, которая скопирует эти значения в каждый из 4 других экземпляров класса данных. Некоторые из элементов управления в моей форме могут влиять на видимость, состояние включения / выключения или выбранное значение других элементов управления. Например, если пользователь выберет значение «Отключено» в одном из выпадающих списков (назовем его comboBoxStatus), это приведет к отключению трех других элементов управления, проверке флажка и изменению заголовка группы. Проблема с этой функциональностью может быть описана следующим сценарием:

  1. Пользователь выбирает значение «Disabled» в comboBoxStatus (которое затем запускает код в своем обработчике событий SelectionChangeCommitted (), который изменяет другие элементы управления, как я описал выше).

  2. Затем пользователь нажимает кнопку, чтобы скопировать текущие выбранные значения во всех элементах управления в другие 4 объекта данных.

  3. Наконец, пользователь выбирает один из 4 других объектов данных из comboBoxMain.

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

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

1 Ответ

0 голосов
/ 19 сентября 2012

Мне удалось решить эту проблему, переместив код в обработчике событий SelectionChangeCommitted в обработчик событий SelectedIndexChanged.

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