(обновление) ICustomTypeDescriptor работает для моего приложения Windows Forms, но не для 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 И поймать фактические изменения этих новых свойств, поэтому, если состояние переключателя изменится, динамический объект сообщит об этом.
Почему? Он должен отображаться в представлении списка, и представление списка, которое я использую, имеет свою привязку, предоставляя имя свойства, а не путь привязки.
Он также пытается перехватить события INotify, приведя объект к INotifyPropertyChanged. Это означает, что он будет сортироваться и/или группироваться, когда что-то изменится.
Если вы знаете лучший способ сделать это, дайте мне знать. Пожалуйста.