2009-08-19 7 views
6

Ich möchte Attribute (wie Browsable (false)) dynamisch während der Anzeige im Raster hinzufügen. Szenario ist, dass ich eine benutzerdefinierte Klasse mit einigen öffentlichen Eigenschaften habe. Ich möchte jedoch nicht, dass alle öffentlichen Eigenschaften in der Benutzeroberfläche angezeigt werden. Gibt es einen Ausweg?Hinzufügen von Attributen auf Eigenschaftsebene dynamisch mit TypeDescriptor für PropertyGrid

Ich versuchte mit TypeDescriptor. Es funktioniert jedoch nur auf der Typenebene und nicht auf der Eigenschaftsebene. Ich konnte keine Hilfe finden, wie man es auf Eigentumsebene benutzt.

Alle Hinweise werden sehr geschätzt.

+0

Es ist möglich, ich habe vollständige Umsetzung in meiner Frage http://StackOverflow.com/Questions/12143650/How-to-Add-PropertyLevelAttribute-to-the-typedescriptor-at-Runtime/12143653 bereitgestellt – Gman

Antwort

2

Eigentlich ist es möglich, aber ich muss zugeben, dass es ziemlich dunkel und schlecht dokumentiert. Der Schlüssel besteht darin, einen eigenen benutzerdefinierten TypeDescriptorProvider aus System.ComponentModel.TypeDescriptionProvider abzuleiten. Dann können Sie Ihren eigenen TypeDescriptor-Nachkommen zurückgeben.

Ich habe dies getan, um eine ziemlich fiese Einschränkung in Bezug auf ViewModels und Metadaten in ASP.NET MVC zu beheben, aber Sie können es genauso gut verwenden, um Ihre eigenen zusätzlichen Metadaten einzufügen.

3

Ich habe in den letzten paar Tagen in diesem Bereich gearbeitet. Lange Rede, kurzer Sinn, ich kam zu dem Schluss, dass dies nicht möglich ist.

Ist der Grund, dass Sie versuchen, Attribute zur Laufzeit anzuwenden, weil Sie "UI" -Code nicht mit Ihren benutzerdefinierten Klassen mischen möchten?

Wenn dies der Fall ist, ist BrowsableAttribute ein Mitglied des ComponentModel (http://msdn.microsoft.com/en-us/library/system.componentmodel.aspx) und ist nicht UI im Zusammenhang mit WinForms verwandt.

Karl