我有一个像这样的简单程序:
public static ObservableCollection<string> Client= new ObservableCollection<string>();
[STAThread]
static void Main()
{
Client.Add("Item1");
Client.CollectionChanged += Clients_CollectionChanged; ;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(form_m = new Mainwindow());
form_m.Close();
}
static void Clients_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
form_m.Program_console_1("Collectionchanged: " + e.NewItems.Count);
}
static void display_socket() {
try {
form_m.listBox1.DataSource = new BindingSource(Client, null);
}
catch (Exception e) {
form_m.Program_console_1("Display Binding Error: "+e.ToString());
}
}
public static void Item_add_btn_Click(object sender, System.EventArgs e)
{
Socket sock = null;
form_m.Program_console_1("New Socket Added" + e.ToString());
clients.Add("Third Socket",sock);
Client.Add("Item2");
}
我已经使用class form_m创建了一个Windows窗体。初始化后,将创建一个Listbox- listbox1。我试图将listbox1绑定到集合,以便在更改集合(添加或删除项目)时,listbox1也发生了变化。我已经在这个论坛上搜索了一个星期,但是仍然无法正常工作。
出于测试目的,我使用一个简单的ObservableCollection。启动表单时。列表框显示Item1。当我使用Item_add_btn_Click方法添加新项目时。我希望列表框显示不会发生的Item1和Item2。
如果我用BindingList替换ObservableCollection,它会很好。一旦调用Item_add_btn_Click,就会在列表框中更新Item2。
为什么会这样?