2009-08-19 12 views
6

Chcę dynamicznie dodawać atrybuty (takie jak Browsable (false)) podczas wyświetlania w siatce. Scenariusz jest taki, że mam niestandardową klasę z niektórymi właściwościami publicznymi. Nie chcę jednak, aby wszystkie właściwości publiczne były wyświetlane w interfejsie użytkownika. Czy jest jakieś wyjście?Dodawać dynamicznie atrybuty poziomu właściwości za pomocą TypeDescriptor dla PropertyGrid

Próbowałem użyć TypeDescriptor. Jednak działa tylko na poziomie typu, a nie na poziomie usługi. Nie mogłem znaleźć żadnej pomocy, jak go używać na poziomie nieruchomości.

Wszelkie wskazówki będą bardzo cenne.

+0

Możliwe, mam pełne wdrożenie w moim pytaniu http://stackoverflow.com/questions/12143650/how-to-add-property-level-attribute-to-the-typedcript-at-runtime/12143653 – Gman

Odpowiedz

2

Właściwie to jest możliwe, ale muszę przyznać, że jest dość niejasna i słabo udokumentowane. Kluczem jest wyprowadzenie własnego niestandardowego TypeDescriptorProvider z System.ComponentModel.TypeDescriptionProvider. Następnie możesz zwrócić swojego potomka TypeDescriptor.

Zrobiłem to, aby naprawić dość nieprzyjemne ograniczenie dotyczące ViewModels i metadanych w ASP.NET MVC, ale równie dobrze można użyć go do wstawienia własnych dodatkowych metadanych.

3

Pracuję w tym samym obszarze od kilku ostatnich dni. Krótko mówiąc, doszedłem do wniosku, że nie jest to możliwe.

Czy próbujesz zastosować atrybuty w środowisku wykonawczym, ponieważ nie chcesz mieszać kodu "UI" z niestandardowymi klasami?

Jeśli tak jest, to BrowsableAttribute jest członkiem ComponentModel (http://msdn.microsoft.com/en-us/library/system.componentmodel.aspx) i nie jest interfejsem użytkownika powiązanym w tym samym znaczeniu co WinForm.

Karl

Powiązane problemy