簡體   English   中英

在動態創建的對象的屬性上使用C#INotifyPropertyChanged?

[英]C# INotifyPropertyChanged on properties of a dynamically created object?

(更新)ICustomTypeDescriptor適用於Windows窗體應用程序,但不適用於Silverlight; 不支持。 我將繼續研究這個想法,然后看看我要去哪里。 (/更新)

我有幾個開關面板(適合那些喜歡類比的開關面板)。 這些開關面板中的每一個都具有名稱(字符串)可以處於打開或關閉狀態(布爾)的開關。 配電盤和開關是在其上具有INotify接口的對象。

使用開關名稱,我創建了集合中所有可能的開關名稱的列表,並創建了一個具有所有這些名稱作為屬性的動態類。

SwitchPanel1 (Switches( Switch1 ("Main",On) , Switch2("Slave",Off)))
SwitchPanel2 (Switches( Switch1 ("Bilge",On) , Switch2("Main",Off)))

產生一個集合

(Main,Bilge,Slave)

並生成具有以下屬性的動態類:

SwitchPanel : (SwitchPanel)
Main : (Switch)
Bilge : (Switch)
Slave: (Switch)

這樣的想法是,如果開關面板上有一個帶有“名稱”屬性的開關,則將其放置在該屬性上。 所以用一點linq

propeties["Main"].SetValue(newSwitchType,SwitchPanel.Switches.FirstOrDefault(sw => sw.Name == "Main"));

我想將此新動態類強制轉換為INotfyPropertyChanged並捕獲這些新屬性的實際更改,因此,如果開關更改狀態,則動態對象將報告它。

為什么? 它需要顯示在列表視圖中,而我正在使用的列表視圖通過提供屬性名稱而不是綁定路徑來進行綁定。

它還嘗試通過將對象強制轉換為INotifyPropertyChanged來捕獲INotify事件。 這意味着它將在事物發生變化時進行排序和/或分組。

如果您知道更好的方法,請告訴我。 請。

您可能不需要動態類。 您可以通過ICustomTypeDescriptor / GetProperties()實現運行時綁定屬性,創建自己的PropertyDescriptor實現,該實現返回命名的開關。 不清楚是什么首先了解更改,但是您可以使用INotifyPropertyChanged ,也可以使用舊的特定於屬性的更改事件,將其再次綁定到每個屬性(因此,每個PropertyDescriptor附加到例如命名開關中的事件。

這不是小事,但也不是沒有可能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM