如何将C#7.0元组类型值的集合绑定到System.Windows.Forms.Listbox并将显示成员设置为其中一个元素?

ror*_*.ap 8 .net c# tuples winforms c#-7.0

我有一个System.Windows.Forms.Listbox和我创建的元组类型值的集合.也就是说,在C#7.0中引入了新的元组类型.我正在尝试将集合绑定到Listbox并将其设置DisplayMember为元组中的一个元素.这是一个例子:

var l = new List<(string name, int ID)>()
{
    ("Bob", 1),
    ("Mary", 2),
    ("Beth", 3)
};

listBox1.DataSource = l;
listBox1.DisplayMember = "name";
Run Code Online (Sandbox Code Playgroud)

但这不起作用.使用旧式风格,Tuple<T>您可以按照以下答案进行操作:

listBox1.DisplayMember = "Item1";
listBox1.ValueMember = "Item3";   // optional
Run Code Online (Sandbox Code Playgroud)

这也行不通.以下是我在两种情况下看到的情况:

在此输入图像描述

我怎么能做到这一点?

Iva*_*oev 10

遗憾的是,C#7值元组不能用于数据绑定,因为它们使用字段,而Windows Forms标准数据绑定仅适用于属性.


Rez*_*aei 7

伊万的回答,肯定描述了这个案子.作为一种解决方法,您可以使用Format事件ListBox显示name提交:

private void listBox1_Format(object sender, ListControlConvertEventArgs e)
{
    e.Value = (((string name, int ID))e.ListItem).name;
}
Run Code Online (Sandbox Code Playgroud)