C# 如何选择较低级别的项目作为列表框的displaymember

C# 如何选择较低级别的项目作为列表框的displaymember,c#,listbox,C#,Listbox,我有一个FLECk.IWebSocketConnection的列表 我试图使用IWebSocketConnection.ConnectionInfo.ClientIpAddress属性在列表框中显示此列表,但我一定是做错了什么 Sockets= new List<IWebSocketConnection>(); ListBox1.DataSource=Sockets; ListBox1.DisplayMember="ConnectionInfo.ClientIpAddress";

我有一个FLECk.IWebSocketConnection的列表

我试图使用IWebSocketConnection.ConnectionInfo.ClientIpAddress属性在列表框中显示此列表,但我一定是做错了什么

Sockets= new List<IWebSocketConnection>();
ListBox1.DataSource=Sockets;
ListBox1.DisplayMember="ConnectionInfo.ClientIpAddress";
我必须重新绑定数据源

ListBox1.DataSource=Sockets;
ListBox1.DisplayMember="ConnectionInfo.ClientIpAddress";
但是lisbox中显示的是“Fleck.WebSocketConnection”,而不是预期的Ip号

为了澄清,列出了连接的写入数量。我只是得到了错误的显示信息。如果创建标签并将其文本设置为

label1.Text =((IWebSocketConnection)SocketList.Items[0]).ConnectionInfo.ClientIpAddress;
它显示IP号码


有人能告诉我我做错了什么吗。

可能有另一种方法,但您可以做的一件事是将需要显示的列表成员展平并绑定到该列表

例如:

var SocketInfos = sockets.Select((s) => new {ClientIpAddress = s.ConnectionInfo.ClientIpAddress,
                                             Socket = s}).ToList();

ListBox1.DataSource=SocketInfos ;
ListBox1.DisplayMember="ClientIpAddress";
但是,无论何时更改源列表,都需要重新生成列表


通过这种方式,您仍然可以从所选的ListBox项返回到所选的套接字实例。

当我尝试此操作时,会出现错误:“复杂数据绑定接受IList或IListSource作为数据源。”在ListBox1.DataSrouce行,尝试在选择的末尾添加
.ToList()
。已经更新了答案。似乎就是这样。非常感谢。我本以为这比那容易,但我不认为数据绑定适合深入对象结构。
var SocketInfos = sockets.Select((s) => new {ClientIpAddress = s.ConnectionInfo.ClientIpAddress,
                                             Socket = s}).ToList();

ListBox1.DataSource=SocketInfos ;
ListBox1.DisplayMember="ClientIpAddress";