6 Stimmen

Attribute auf Eigenschaftsebene dynamisch mit TypeDescriptor für PropertyGrid hinzufügen

Ich möchte Attribute (wie Browsable(false)) dynamisch hinzufügen, während sie im Raster angezeigt werden. Das 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?

Ich habe versucht, TypeDescriptor zu verwenden. Er funktioniert jedoch nur auf der Ebene des Typs und nicht auf der Ebene der Eigenschaft. Ich konnte keine Hilfe dazu finden, wie man ihn auf Eigenschaftsebene verwendet.

Für jeden Hinweis sind wir dankbar.

3voto

Karl Punkte 659

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

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

Wenn das der Fall ist, muss die BrowsableAttribute ist ein Mitglied des ComponentModel ( http://msdn.microsoft.com/en-us/library/system.componentmodel.aspx ) und ist nicht UI-bezogen im gleichen Sinne wie WinForms.

Karl

2voto

Adrian Grigore Punkte 32344

Es ist tatsächlich möglich, aber ich muss zugeben, dass es ziemlich obskur und schlecht dokumentiert ist. Der Schlüssel ist, Ihre eigene benutzerdefinierte TypeDescriptorProvider von System.ComponentModel.TypeDescriptionProvider ableiten. Dann können Sie Ihre eigene TypeDescriptor Nachkomme zurückgeben.

Ich habe dies getan, um eine ziemlich unangenehme 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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X