2009-09-04 82 views
1

如何創建綁定到列表中特定元素的子屬性?如何綁定到列表<T>中特定項目的子屬性?

我已經創建了公開一個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」用戶控件與單個布爾屬性(「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

的WinForms,WPF或ASP.NET?他們都使用C#,UserControls和DataBinding。 – 2009-09-04 17:10:08

+0

Winforms,現在。 – user158485 2009-09-04 17:20:18

回答

2

如何:

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

也就是說,並確保您的VideoChannel類實現INotifyPropertyChanged.

+0

我已經在VideoChannel上實現了INotifyPropertyChanged。你的建議使用'_myDevice.VideoChannels [0]'似乎編譯得很好,但更新似乎並沒有傳播。難道是因爲_myDevice在每個'get'請求上返回一個NEW List ? – user158485 2009-09-04 17:36:17

+0

我的錯誤,你的建議完美。謝謝! – user158485 2009-09-04 17:58:56

1

這將是一個神奇的 「魔術字符串」 ;-)

您可以創建單獨的屬性像這樣:

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

然後

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

您希望添加空檢查也...

+0

是的,這是我的第一個方法,工作得很好。 '_myDevice'也包含許多其他類似的屬性(SerialDataChannels,VideoChannels,BackplaneChannels等)。 我覺得暴露一些IList是一個更清潔的方法 - 每個通道集合與50多個單獨屬性的一個列表。 – user158485 2009-09-04 17:26:56

相關問題