我正在制作聊天程序,我有一个用于连接聊天服务器的API。
API中的是主要类。
public partial class PengChat3ClientSock : IDisposable
好吧,我也覆盖了ToString
方法。
public override string ToString()
{
string s;
if (ConnectedIP != null && ConnectedPort != null)
s = ConnectedIP + ':' + ConnectedPort.Value.ToString();
else
return "";
if (string.IsNullOrEmpty(Nickname))
return s;
else
return s + " \"" + Nickname + "\"";
}
好吧,在客户端程序中,
这是套接字列表
private List<PengChat3ClientSock> socketList = new List<PengChat3ClientSock>();
我有组合框,显示连接列表
<ComboBox Grid.Row="0" Grid.ColumnSpan="2" Height="20">
</ComboBox>
现在,我想将ComboBox ItemsSource与变量socketList
我想在客户端创建新套接字时添加/删除套接字列表,然后回退到socketList或从socketList中删除。
有可能吗?
感谢。
答案 0 :(得分:1)
使用ObservableCollection<PengChang3ClientSock>
而不是普通列表。当从集合中添加或删除项目以通知绑定控件时,ObservableCollection将引发CollectionChangedEvent。
将ObservableCollection设置为ComboBox的ItemsSource,如
<ComboBox Grid.Row="0" Grid.ColumnSpan="2" Height="20" ItemsSource="{Binding Sockets}">
</ComboBox>
此设置要求ComboBox的DataContext(ViewModel)具有封装ObservableCollection的属性套接字。
public ObservableCollection Sockets{
get{
return socketList;
}
}
答案 1 :(得分:1)
你应该使用ObservableCollection。
private ObservableCollection<PengChat3ClientSock> socketList = new ObservableCollection<PengChat3ClientSock>();
然后在XAML中命名组合框
<ComboBox Name="SocketListComboBox" Grid.Row="0" Grid.ColumnSpan="2" Height="20">
</ComboBox>
在代码(xaml.cs)中,在InitializeComponents()之后的构造函数中;做
SocketListComboBox.ItemsSource = socketList;
其他方法是在XAML中绑定它;
<ComboBox Name="SocketListComboBox" Grid.Row="0" Grid.ColumnSpan="2" Height="20" ItemsSource = "{Binding socketList}">
</ComboBox>
在构造函数中将ComboBox DataContext设置为socketList的所有者; socketList必须是带有public get的属性。
public ObservableCollection<PengChat3ClientSock> socketList {get; protected set; }
答案 2 :(得分:0)
是的,你可以。 您应该在ObservableCollection
中保留套接字列表private ObservableCollection]<PengChat3ClientSock> socketList = new List<PengChat3ClientSock>();
然后像这样添加一个绑定到组合框:
ComboBox Grid.Row="0" Grid.ColumnSpan="2" Height="20" ItemSource="{Binding socketList}>
您需要做的最后一件事是将带有ComboBox的Window的DataContext设置为具有列表的类。
DataContext = new ClassWithSocketList();
从现在开始,您在列表中进行的每项操作都会绑定到列表。