将 ListBox 的 SelectedItem 绑定到另一个 ListBox

2024-04-13

我有这个模型:

class Car
{
  string CrewNickname { get; set; }
  Líst<string> RacersNames { get; set; }
}

class StartingField
{
  List<Car> Cars { get; set; }
}

我需要的是在一个列表框中显示汽车,当我单击任何汽车时,在第二个列表框中显示其赛车手的名称。
我还需要能够添加/删除汽车和添加/删除/编辑赛车。

我还没有找到任何合适的教程或问题,但我认为这一定是可以创建的。


你可以这样做:

  • 使用两个 BindingSource 对象将列表中的每个 Car 链接到其列表RacersNames
  • 添加一个属性,用于在第一个列表框中显示每个汽车名称(CarID属性只是为了显示其用途ValueMember)
  • 当然,您需要公共属性。

BindingSource bsCars = null;
BindingSource bsRacers = null;
StartingField startingField = null;

public class Car
{
    public Car(string carName, int carID) { CarName = carName; CarID = carID; }
    public string CarName { get; }
    public int CarID { get; }
    public List<string> RacersNames { get; set; } = new List<string>();
}

public class StartingField
{
    public List<Car> Cars { get; } = new List<Car>();
}

然后初始化数据源并设置BindingSource对象和ListBoxes的DataSource。
由于第二个 BindingSource 链接到RacersNames第一个 BindingSource 的属性,当您在第一个 ListBox 中选择汽车名称时,第二个 BindingSource 将更新其内容,因此,绑定到它的 ListBox 将显示以下列表:RacersNames与新的选择有关。

可以在两个列表中添加或删除元素。

您可以将此代码添加到Load事件(或OnLoad()覆盖)表单。

protected override void OnLoad(EventArgs e) 
{
    startingField = new StartingField();
    var c1 = new Car("Car1", 1) { RacersNames = { "Racer1", "Racer2", "Racer3" } };
    var c2 = new Car("Car2", 2) { RacersNames = { "Racer4", "Racer5", "Racer6" } };
    var c3 = new Car("Car3", 3) { RacersNames = { "Racer7", "Racer8", "Racer9" } };
   
    startingField.Cars.AddRange(new[] { c1, c2, c3});

    bsCars = new BindingSource(startingField.Cars, "");
    bsRacers = new BindingSource(bsCars, "RacersNames");

    lstCars.DisplayMember = "CarName";
    lstCars.ValueMember = "CarID";
    lstCars.DataSource = bsCars;
    lstRacers.DataSource = bsRacers;
}

添加或删除Car对象,或从当前添加/删除元素RacersNames列表,使用链接的 BindingSource。
您可以从基础 BindingList(内部创建的列表)添加/删除元素。

See the animation to determine what Buttons this code maps to

private void btnAddCar_Click(object sender, EventArgs e)
{
    var newCar = startingField.Cars.Count + 1;
    bsCars.Add(new Car($"Car{newCar}", newCar)
    {
        RacersNames = { "Racer10", "Racer11", "Racer12" }
    });
}

private void btnAddRider_Click(object sender, EventArgs e)
{
    bsRacers.Add("New Rider");
}

private void btnRemoveRider_Click(object sender, EventArgs e)
{
    if (lstRacers.SelectedIndex < 0) return;
    bsRacers.Remove(lstRacers.GetItemText(lstRacers.SelectedItem));
}

它是这样工作的:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 ListBox 的 SelectedItem 绑定到另一个 ListBox 的相关文章

随机推荐