Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WinForms数据绑定-绑定到列表中的对象_C#_.net_Winforms_Data Binding - Fatal编程技术网

C# WinForms数据绑定-绑定到列表中的对象

C# WinForms数据绑定-绑定到列表中的对象,c#,.net,winforms,data-binding,C#,.net,Winforms,Data Binding,我需要一些关于WinForms数据绑定的帮助/指导,但我似乎无法让谷歌帮我解决这个问题 这是我的设想。考虑下面的类与我所需要的类似: public class Car { public string Name { get; set; } public List<Tire> Tires { get; set; } } public class Tire { public double Pressure { get; set; } } 但是当我的列表包含20个

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

这是我的设想。考虑下面的类与我所需要的类似:

public class Car
{
    public string Name { get; set; }
    public List<Tire> Tires { get; set; }
}

public class Tire
{
    public double Pressure { get; set; }
}

但是当我的列表包含20个对象而不是4个对象时,这就变得非常糟糕了,对于这些对象中的每一个,我都想根据6个属性进行绑定。这就是一个巨大的“BindableObject”

虽然WinForms designer可能不允许您这样做,但您是否尝试过在代码中设置绑定?我想将文本框绑定到某个car.Tires[1].Pressure是没有问题的。

您应该注意,您可以将控件绑定到实现接口的任何对象类型
IList
ICollection
IEnumerable
或继承自实现这些接口的类。泛型集合也符合这种绑定的条件

它们在内部转换为
IBindingList
实例

有关详细信息,请查看以下链接:

  • -非常全面地介绍了实现和可能性,并提供了指向其他知识库文章的各种链接
  • -Rockford Lhotka关于该主题的文章。提供了一种面向Windows窗体设计器的实现数据绑定的方法
  • -Brian Noyes的这本书探讨了数据绑定的各个方面,包括复杂场景和简单场景
    不,我没有,因为我认为由于设计师提示的消息,这不受支持。我会尽快试一试的。一张便条。在第一个链接中,它说“…Windows窗体对象模型不支持绑定到…
    IEnumerable
    接口,因为绑定到简单对象以外的任何对象时都需要向后滚动支持。”。您说,
    IEnumerable
    将自动转换为
    IBindingList
    。您应该能够通过代码而不是设计器绑定到列表。这是一个(几个小时前)的例子。在我看来,您已经用正确的方法解决了这个问题,为您的汽车类创建了一个“视图”对象包装器,并在UI中使用它。也许,你有一个你在UI中显示的汽车列表,所以你会想读一下CurrencyManager,看看这将如何帮助你的发展…从10年前开始。
    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; }
        }
    }