WinForms数据绑定 – 绑定到列表中的对象

我需要一些关于WinForms数据绑定的帮助/指导,我似乎无法让Google帮助我解决这个问题。

这是我的情景。 考虑以下类似于我需要的类:

public class Car { public string Name { get; set; } public List Tires { get; set; } } public class Tire { public double Pressure { get; set; } } 

我的实例将是Car类的一个对象,其中List包含四个Tire对象。 请注意,我将在列表中始终具有已知数量的对象。

现在我想将数据绑定到包含五个文本框的Form。 一个带有汽车名称的文本框和一个带有每个轮胎压力的文本框。

有关如何使这项工作的任何想法? VS中的设计者似乎不允许我通过分配像Tires [0] .Pressure这样的列表索引来设置它。

我目前的解决方案是绑定到“BindableCar”,它将是:

 public class BindableCar { private Car _car; public BindableCar(Car car) { _car = car; } public string Name { get { return _car.Name; } set { _car.Name = value; } } public double Tire1Pressure { get { return _car.Tires[0].Pressure; } set { _car.Tires[0].Pressure = value; } } public double Tire2Pressure { get { return _car.Tires[1].Pressure; } set { _car.Tires[1].Pressure = value; } } public double Tire3Pressure { get { return _car.Tires[2].Pressure; } set { _car.Tires[2].Pressure = value; } } public double Tire4Pressure { get { return _car.Tires[3].Pressure; } set { _car.Tires[3].Pressure = value; } } } 

但是当我的列表包含20个而不是4个对象时,这变得非常难看,并且对于每个这些对象,我想要绑定6个属性。 这是一个巨大的“BindableObject”!

虽然WinForms设计师可能不允许你这样做,你尝试在代码中设置绑定吗? 我想将文本框绑定到someCar.Tires [1]没有问题。压力。

您应该注意,您可以将控件绑定到任何实现接口IListICollectionIEnumerable对象类型,或者从实现这些接口的类inheritance。 通用集合也有资格进行这种绑定。

这些内部转换为IBindingList实例。

有关更多信息,请查看以下链接:

  1. Windowsform数据绑定路线图 – 全面了解实现和可能性,并提供各种知识链接到其他知识库文章。
  2. Winforms对象绑定 – Rockford Lhotka关于这个主题的文章。 提供面向Windows窗体设计器的实现数据绑定的方法。
  3. 使用Windows窗体2.0进行数据绑定 – Brian Noyes的这本书探讨了数据绑定的各个方面,包括复杂和简单的场景。