如何解决:为什么 MyComboBox.Items.Count = 0,如果我将一个包含 1 个或更多元素的列表 <MyClass> 添加为数据源?

How to fix: Why is MyComboBox.Items.Count = 0, if I add as DataSource an List<MyClass> with 1 and more Elements?

我需要一些帮助。 我想将一个列表作为数据源添加到组合框。 该列表包含 1 个或多个 "Zaehler".

类型的元素

我在我的 GUI 中使用了 3 个组合框。两次有效。我创建了一个列表元素并添加了 T 的元素。之后我将这个列表设置为数据源。如果我检查调试器,它说 comboBox.Items = List..Count = comboBox.DataSource.Count.

private void LadeZaehlerDaten()
{
    //NEUER ZÄHLER
    List<Zaehler> zaehlerArten = new List<Zaehler>();
    zaehlerArten.Add(new StromZaehler(1, "Stromzähler"));
    zaehlerArten.Add(new GasZaehler(2, "Gaszähler"));

    cb_ZaehlerArt.DataSource = zaehlerArten;
    cb_ZaehlerArt.DisplayMember = "Name";
    cb_ZaehlerArt.Sorted = true;
    cb_ZaehlerArt.DropDownStyle = ComboBoxStyle.DropDownList;

    Zaehler z = (Zaehler)cb_ZaehlerArt.SelectedItem;
    // ... more code

}

此代码工作正常...我有 zaehlerArten 和 2 个元素,在 ComboBox 中我有 2 个项目 bzw。 DataSource.Count = 2.

在此之后我创建了一个新的 Zaehler 并将其添加到列表 zaehlerList 中,它将包含所有正确的 Zaehler。 这个出错了....

 private void LadeVertragsDaten()
 {
    //NEUER VERTRAG
    cb_VertragZaehler.DataSource = zaehlerList;
    cb_VertragZaehler.DisplayMember = "Name";       //Property in Zaehler
    cb_VertragZaehler.ValueMember = "ZaehlerNr";    //Property in Zaehler
    //cb_VertragZaehler.Sorted = true;
    cb_VertragZaehler.DropDownStyle = ComboBoxStyle.DropDownList;

    if (cb_VertragZaehler.Items.Count < 1)
    {
        return;
    }
    else
    {
        Zaehler auswahl = (Zaehler)cb_VertragZaehler.SelectedItem;
    }
 }

如果我检查调试器...它说 das cb_VertragZaehler.Items 是 0 但 DataSource 和 zaehlerList 计数 2。

在我看来,我没有做任何不同的事情。它应该像 LadeZaehlerDaten()

一样工作

由于ComboBox 的Items 为0 我无法使用此"Zaehler" 的信息。

我确实说过 DisplayMember 是 Name ... 即使我确实希望使用像 ZaehlerNr 和 Name 这样的东西... booth 是 class Zaehler 的属性。

有人能说说为什么它在 LadeZaehlerDaten() 中有效但在 LadeVertragsDaten() 中无效吗?

图片:DebuggerInformation

而且我真的不知道为什么..

您尝试分配的列表应该是不可变的。尝试使用 cb_VertragZaehler.DataSource = new List<Zaehler>(zaehlerList);

创建它的副本