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

标签 c# listbox

我有一个 FLECk.IWebSocketConnection 列表

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

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

当我使用添加到套接字时

Sockets.Add(socket);

我必须重新绑定(bind)数据源

ListBox1.DataSource=Sockets;
ListBox1.DisplayMember="ConnectionInfo.ClientIpAddress";

但是列表框中显示的是“Fleck.WebSocketConnection”,而不是预期的 Ip 编号。

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

label1.Text =((IWebSocketConnection)SocketList.Items[0]).ConnectionInfo.ClientIpAddress;

显示IP号码

有人可以告诉我我在这里做错了什么吗?

最佳答案

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

例如:

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

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

不过,每当您更改源列表时,您都需要重新生成列表。

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

关于c# - 如何选择较低级别的项目作为列表框的显示成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11884128/

相关文章:

c# - 无法在列表框中找到所选项目 C# ASP.NET

c# - 将 ListBox DataSource 属性设置为 null 以更改列表项是否错误?

c# - 列表框更新#2

c# - 多点触摸屏和 WPF 列表框

c# - C#/WPF访问MySQL的方式

c# - 在 SQL 中实现 C# 迁移代码

javascript - 在没有页面刷新的情况下直接从 javascript 调用没有按钮单击的 asp.net 函数

c# - 不支持位图编码器保存

c# - Windows 8 商店应用程序 - 滑动手势进行导航

C#:用户代码未处理 ArgumentOutOfRangeException