Имеет ли значение порядок назначения DataSource для BindingSource и назначения DisplayMember для ComboBox в WinForms?C#

Место общения программистов C#
Anonymous
Имеет ли значение порядок назначения DataSource для BindingSource и назначения DisplayMember для ComboBox в WinForms?

Сообщение Anonymous »

Я обнаружил, что следующие два кода, меняющие порядок назначения DataSource BindingSource и назначения DisplayMember моему ComboBox, на самом деле дают разные результаты. Когда я назначаю DisplayMember перед определением источника данных, как показано в следующих кодах, ComboBox фактически не отображает желаемый элемент DisplayMember (myProtocolInstance.Name), но выводит «myNameSpace.Protocol». В обоих окнах сообщений отображается пустая строка.

Код: Выделить всё

Dictionary bs = new Dictionary() {"protocol", new BindingSource()};
this.protocolCombo.DataSource = bs["protocol"];
MessageBox.Show($"{this.protocolCombo.DisplayMember}");  //output: ""
this.protocolCombo.DisplayMember = "Name";
MessageBox.Show($"{this.protocolCombo.DisplayMember}");  //output: ""
bs["protocol"].DataSource = protocol_list;
Однако, когда я меняю их порядок таким образом, ComboBox правильно отображает желаемые свойства имени из экземпляра протокола. И окно сообщений также отображает более разумный вывод: в первом отображается пустая строка, а во втором — «Имя».

Код: Выделить всё

Dictionary bs = new Dictionary() {"protocol", new BindingSource()};
this.protocolCombo.DataSource = bs["protocol"];
MessageBox.Show($"{this.protocolCombo.DisplayMember}");  //output: ""
bs["protocol"].DataSource = protocol_list;
this.protocolCombo.DisplayMember = "Name";
MessageBox.Show($"{this.protocolCombo.DisplayMember}");  //output: "Name"
Упрощенная версия класса протокола

Код: Выделить всё

public class Protocol
{
public string Name {  get; set; }
public Protocol(string name)
{
Name = name;
}
}
Интересно, это дефект Winform или он так задуман?
Дополнительная информация: Этот проект написан под .Net6. 0

Подробнее здесь: https://stackoverflow.com/questions/789 ... displaymem

Вернуться в «C#»