【问题标题】:WPF ComboBox binding automaticallyWPF ComboBox 自动绑定
【发布时间】:2014-09-02 10:32:04
【问题描述】:

我正在制作聊天程序,并且我有一个用于连接聊天服务器的 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 绑定

我想在客户端创建新套接字时添加/删除套接字列表,并推回套接字列表或从套接字列表中删除。

有可能吗?

谢谢。

【问题讨论】:

  • ObsrevableCollection

标签: c# wpf binding combobox


【解决方案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必须是一个公共get的属性。

public ObservableCollection<PengChat3ClientSock> socketList {get; protected set; }

【讨论】:

    【解决方案2】:

    使用ObservableCollection&lt;PengChang3ClientSock&gt; 而不是普通列表。当从集合中添加或删除项目时,ObservableCollection 将引发和 CollectionChangedEvent 以通知绑定控件。

    将 ObservableCollection 设置为 ComboBox 的 ItemsSource 类似

    <ComboBox Grid.Row="0" Grid.ColumnSpan="2" Height="20" ItemsSource="{Binding Sockets}">                   
    </ComboBox>
    

    此设置要求 ComboBox 的 DataContext (ViewModel) 具有封装 ObservableCollection 的属性 Sockets。

    public ObservableCollection Sockets{
      get{
        return socketList;
      }
    }
    

    【讨论】:

      【解决方案3】:

      是的,你可以。 您应该将套接字列表保存在 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();
      

      从现在开始,您在列表上执行的每个操作都将绑定到列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-09
        • 1970-01-01
        • 1970-01-01
        • 2011-11-01
        • 2015-04-07
        • 1970-01-01
        • 2010-10-08
        • 2015-06-28
        相关资源
        最近更新 更多