Я пытаюсь изучить некоторые основы c манипулирования данными через Entity Framework. В этом конкретном сценарии я случайно натолкнулся на некоторые неоднозначные строки кода, которые я нашел в сети.
У меня есть Combobox со свойством DisplayMember и свойством ValueMember Set для определенных имен столбцов таблицы. Моя интерпретация до сих пор заключалась в том, чтобы связать DisplayMember и ValueMember после того, как я установил свойство DataSource в Combobox, поскольку оно кажется более интуитивным. Например:
ComboBox1.DataSource = SalesEntity.Products.ToList();
ComboBox1.DisplayMember = "CategoryName"
ComboBox1.ValueMember = "CategoryId"
В программе, над которой я сейчас работаю, я получил CastException, работающий с этим подходом. Я знал, что это действительно RuntimeError, но я не мог видеть свою форму (процесс начался, но пока не показан)! Я понял, что событие SelectedIndexChanged срабатывает, как только загружается форма. Итак, после нескольких кликов Google, я пришел по этой теме:
ComboBox.ValueMember и DisplayMember
Это объясняет, что DataSource должен быть установлен после привязки DisplayMember и ValueMember свойства со столбцом, чтобы избежать этих ошибок.
ComboBox1.DisplayMember = "CategoryName"
ComboBox1.ValueMember = "CategoryId"
ComboBox1.DataSource = SalesEntity.Products.ToList();
Хотя это сработало, я хочу знать, почему это работает?
Мои мысли : Я предполагаю, что установка ComboBox на dataSource сначала инициализирует свойство SelectedIndex, а когда свойство ValueMember / DisplayMember установлено, оно изменяет свойство SelectedIndex в соответствии со значениями по умолчанию для типа, связанного с этими свойствами (ValueMember / DisplayMember ). Принимая во внимание, что установка DataSource, наконец, позволяет избежать повторной инициализации свойств. Поправьте меня, если я ошибаюсь.
Должна была произойти некоторая инициализация, чтобы событие сработало, как только оно загрузится. Какая инициализация вызывает это событие так быстро?