在 C# 中使用 "Items.Add()" 更新列表框和使用 "BindingSource" 之间的区别?

Difference between updating a listbox using "Items.Add()" and using a "BindingSource" in C#?

我是 C# OOP 的新手。我有一个简单的表单,包括一个文本框、一个列表框和一个用于将文本框的输入字符串添加到列表框的按钮。我想使用文本框信息(型号和价格)创建一个 Car 对象并将其添加到列表框。 我的问题是:这两种解决方案有什么区别? 1- 使用列表框的 Items.Add() 方法添加项目(更简单) 2- 使用绑定源实例添加项目并将其分配给列表框数据源 属性.

代码如下:

1:

namespace CarShopGUI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Car c = new Car(txt_Model.Text,decimal.Parse(txt_Price.Text));
            lst_inventory.Items.Add(c);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
          
        }
    }
}

2:

namespace CarShopGUI
{
    public partial class Form1 : Form
    {
        Store myStore = new Store();
        BindingSource carInventoryBindingSource = new BindingSource();
        public Form1()
        {
            InitializeComponent();
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Car c = new Car(txt_Model.Text,decimal.Parse(txt_Price.Text));
            myStore.CarList.Add(c);
            carInventoryBindingSource.ResetBindings(false);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            carInventoryBindingSource.DataSource = myStore.CarList;
            lst_inventory.DataSource = carInventoryBindingSource;           
        }
    }
}

数据绑定添加事件,以便在数据更改时更新。 如果您静态管理一个列表,则它由您管理。 查看这些,看看它们是否有助于回答您的问题。

BindingList vs List - WinForms Data Binding

List vs BindingList Advantages/DisAdvantages

在向 ListBox 添加项目的第一个示例中,列表完全由 UI 控件“拥有”。如果您想对该列表执行其他操作,例如添加或删除项目或对该项目列表执行某些操作,您必须从 ListBox 中获取它。然后,如果您修改了列表,则必须对 ListBox 中的项目进行相应的更改,或者只是清除它并将项目添加回其中。

在第二个示例中,您将绑定到 List<Car>。该列表“拥有”其内容。如果您想对这些汽车进行一些操作,您可以将该列表传递给另一个方法,修改后您可以重置绑定以更新控件。或者,如果基础数据源发生变化,您可以将其加载到 List 并重置绑定。

ListBox 不是强类型。您可以向其中添加任何对象。 List<Car> 将仅包含 Car.

类型的项目

如果您只想在屏幕上显示项目以便用户可以看到它们并选择一个项目,那么直接添加到 ListBox 可能就足够了。但是,如果该列表反映了一个发生变化的数据源,那么保持该源独立并将其绑定到控件可能会更好。