如何绑定到List <t>?</t>中特定项的子属性

时间:2009-09-04 16:57:20

标签: c# data-binding user-controls

如何创建对列表中特定元素的子属性的绑定?

我创建了一个暴露IList属性的类:

    public IList<VideoChannel> VideoChannels {
        get {
            const int NumVideoChannels = 4;

            return (new List<VideoChannel>(NumVideoChannels) {

                new VideoChannel("Channel 1") { 
                    VideoActive = !_rawData[Main][0x04].BitIsSet(0), 
                    OutOfRange = !_rawData[Main][0x05].BitIsSet(0) },

                new VideoChannel("Channel 2") { 
                    VideoActive = !_rawData[Main][0x04].BitIsSet(1), 
                    OutOfRange = !_rawData[Main][0x05].BitIsSet(1) },

                new VideoChannel("Channel 3") { 
                    VideoActive = !_rawData[Main][0x04].BitIsSet(2), 
                    OutOfRange = !_rawData[Main][0x05].BitIsSet(2) },

                new VideoChannel("Channel 4") { 
                    VideoActive = !_rawData[Main][0x04].BitIsSet(3), 
                    OutOfRange = !_rawData[Main][0x05].BitIsSet(3) },

            }).AsReadOnly();
        }
        set { ;}
    }

我还创建了一个'LED'UserControl,它有一个布尔属性('LedOn'),用于确定led的颜色。

我想创建8个'LED'控件,每个控件都绑定到上面IList中的特定“VideoActive”或“OutOfRange”属性。

这似乎不起作用:

        ledVideoActiveChannel1.DataBindings.Add("LedOn", _myDevice, "VideoChannels[0].VideoActive");

        ledOutOfRangeChannel1.DataBindings.Add("LedOn", _myDevice, "VideoChannels[0].OutOfRange");

错误是“无法创建字段VideoChannels [0]的子列表。”

我对C#和OOP相对较新,所以如果这是一个微不足道的问题,请原谅我。

谢谢!

2 个答案:

答案 0 :(得分:2)

这个怎么样:

ledVideoActiveChannel1.DataBindings.Add("LedOn", _myDevice.VideoChannels[0], "VideoActive");
ledOutOfRangeChannel1.DataBindings.Add("LedOn", _myDevice.VideoChannels[0], "OutOfRange");

那,并确保您的VideoChannel类实现INotifyPropertyChanged.

答案 1 :(得分:1)

这将是一个神奇的“神奇的字符串”; - )

您可以像这样创建单独的属性:

public bool OutOfRange
{
  get{ return VideoChannels[0].OutOfRange; }
}

然后

ledOutOfRangeChannel1.DataBindings.Add("LedOn", _myDevice, "OutOfRange");

您还希望添加空检查...