如何创建对列表中特定元素的子属性的绑定?
我创建了一个暴露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相对较新,所以如果这是一个微不足道的问题,请原谅我。
谢谢!
答案 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");
您还希望添加空检查...