WPF ComboBox自动绑定

时间:2014-09-02 10:32:05

标签: c# wpf binding combobox

我正在制作聊天程序,我有一个用于连接聊天服务器的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中删除。

有可能吗?

感谢。

3 个答案:

答案 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();

从现在开始,您在列表中进行的每项操作都会绑定到列表。