如何选择较低级别的项作为列表框的显示成员



我有一个 FLECk.IWebSocketConnection 列表

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

Sockets= new List<IWebSocketConnection>();
ListBox1.DataSource=Sockets;
ListBox1.DisplayMember="ConnectionInfo.ClientIpAddress";

当我使用

Sockets.Add(socket);

我必须重新绑定数据源

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";

但是,每当更改源列表时,都需要重新生成列表。

这样,您仍然可以从选定的列表框项返回到选定的套接字实例。

最新更新