无法在 winforms 中将 ValueMember 设置为 listBox

can not set ValueMember to listBox in winforms

我无法将 ValueMember 设置为 listBox

我有class技能

class Skill
    {
        public string skillId { get; set; }
        public string name { get; set; }

        public Skill()
        {
        }

        public Skill(string skillId, string name)
        {
            this.skillId = skillId;
            this.name = name;
        }
    }

我将列表技能添加到列表

            List<Skill> skills = new List<Skill>();
            skills.Add(new Skill("1", "Long"));
            skills.Add(new Skill("2", "Nhi"));

            foreach (var item in skills)
            {
                listBox1.Items.Add(item);
                listBox1.ValueMember = "skillId";
                listBox1.DisplayMember = "name";
            }

DisplayMember显示到listBox,但ValueMember没有设置到listBox 当我在 ListBox 中单击选定的项目并单击按钮时,我打印

Console.WriteLine("value id listbox1:" + listBox1.SelectedValue);

但是什么都不显示

value id listbox1:

答案是 - 您需要为此使用 DataSourse 属性

listBox1.ValueMember = "skillId";
listBox1.DisplayMember = "name";
listBox1.DataSource = skills; // where skills  = List<Skill>

并确保最后设置 DataSourse。它具有性能影响。

如果您需要删除项目,您可以使用 BindingList<Skill> 或不绑定到列表而是绑定到从该列表生成的数组 (LINQ) - skills.ToArray()。然后你总是可以从内存中的列表中删除项目,然后再次调用 listBox1.DataSource = skills.ToArray()