(обновление) ICustomTypeDescriptor работает для моего приложения Windows Forms, но не для Silverlight; Не поддерживается. Я продолжу расследование этой идеи и посмотрю, куда я могу добраться. (/ update)C# INotifyPropertyChanged по свойствам динамически созданного объекта?
У меня есть, скажем, несколько коммутационных панелей (для тех, которые похожи на аналогию). Каждая из этих коммутационных панелей имеет переключатели, у которых имя (строка) может находиться в состоянии (bool) вкл. Или выкл. Коммутационная панель и коммутаторы - это объекты, на которых есть интерфейс 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. Это означает, что он будет сортировать и/или группироваться, когда ситуация изменится.
Если вы знаете, как лучше это сделать, дайте мне знать. Пожалуйста.
Как вы говорите, не тривиальны, но, безусловно, проще, чем создание динамического класса ... –
Это может быть интересным способом сделать это, и это, безусловно, искрение моего – Dann
Работал нормально, но не с другим проектом, потому что это в Silverlight (так как это не поддерживает ICustomTypeDescriptor, grrr). Отметьте как ответ, но любые идеи для s ilverlight тоже будет хорошо. – Dann