Итак, у меня есть класс «Рабочий» и BindingList, который привязан к ComboBox.
workers = new BindingList<Worker>();
//// .. An "Add" button is somewhere there to add "Worker" objects to the list
//ComboBox Workers List
cbWorkersList.DataSource = workers;
cbWorkersList.DisplayMember = "Name";
Я хочу связать поле «Текст» в TextBox со свойством «Имя» выбранного объекта «Рабочий» в ComboBox.
Теперь я сделал это с помощью обработчика событий "cbWorkersList_SelectedIndexChanged", изменив вручную свойство txtWorkerName.Text:
private void cbWorkersList_SelectedIndexChanged(object sender, EventArgs e)
{
if (cbWorkersList.SelectedItem != null)
{
txtWorkerName.Text = workers[workers.IndexOf((Worker)cbWorkersList.SelectedItem)].Name;
}
}
Я пытался связать TextBox следующим образом:
InitializeComponent();
txtWorkerName.DataBindings.Add("Text", cbWorkersList, "Text");
Но обновление TextBox происходит только в том случае, если я щелкаю по другому элементу в списке, если для изменения выбора используются клавиши со стрелками, текстовое поле TextBox не изменяется.
Есть ли способ действительно связать их так, чтобы, если выбран элемент ComboBox, текстовое поле изменилось соответственно?
В этой теме у меня также есть 2 других ComboBox, и я хотел бы привязать 1 к списку, который находится внутри объекта ComboBox других.
То, что я хочу, это решение со следующей логикой:
cbPositions.Items = ((<Shift>)cbShifts.SelcetedItem).PositionsList
, когда
cbPositions - это ComboBox, который должен быть заполнен объектами «Position».
И cbShifts - это ComboBox, который заполняется объектами «Shift», где каждый «Shift» содержит список позиций.
Как их связать, чтобы каждый раз, когда я выбираю другой Shift из списка, ComboBox Positions будет заполняться объектами Position из Shift.PositionList?
А также, я хотел бы знать, возможно ли связать «Элементы» ComboBox со списком (мой список рабочих в этом примере), не с помощью кода, а в конструкторе (Настройки приложения или DataBindings)?