将项目添加到ObservableCollection <string>时,ListBox UI不会更改

时间:2019-01-13 20:24:04

标签: c# visual-studio winforms listview

我有一个像这样的简单程序:

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。

为什么会这样?

0 个答案:

没有答案