Wie injiziere ich einen benutzerdefinierten UITypeEditor für alle Eigenschaften eines Closed-Source-Typs?

8

Ich möchte vermeiden, ein EditorAttribute für jede Instanz eines bestimmten Typs zu platzieren, für den ich einen benutzerdefinierten UITypeEditor geschrieben habe.

Ich kann kein EditorAttribute für den Typ platzieren, da ich die Quelle nicht ändern kann.

Ich habe einen Verweis auf die einzige PropertyGrid-Instanz, die verwendet wird.

Kann ich einer PropertyGrid-Instanz (oder allen Instanzen) mitteilen, einen benutzerdefinierten UITypeEditor zu verwenden, wenn ein bestimmter Typ gefunden wird?

Hier ist ein MSDN-Artikel, der einen Einstieg in die Vorgehensweise bietet. NET 2.0 oder höher.

    
Cat Zimmermann 11.05.2009, 17:45
quelle

3 Antworten

16

Sie können Editoren usw. zur Laufzeit normalerweise über TypeDescriptor.AddAttributes zuordnen. Zum Beispiel (die Eigenschaft Bar sollte mit einem "..." angezeigt werden, das "Bearbeiten!" Anzeigt):

%Vor%     
Marc Gravell 11.05.2009, 19:56
quelle
3

Die Lösung von Marc wendet das EditorAttribute ohne Umschweife global auf den Typ "Balken" an. Wenn Sie eine delikate Disposition haben, können Sie Eigenschaften bestimmter Instanzen annotieren. Leider ist das mit TypeDescriptor.AddAttributes

nicht möglich

Meine Lösung bestand darin, einen Wrapper ViewModel<T> zu schreiben, der Eigenschaften von T kopiert und einige mit zusätzlichen Attributen annotiert. Angenommen, wir hätten eine Variable datum vom Typ Bericht, würden wir sie so verwenden

%Vor%

Wo ViewModel<T> definiert ist:

%Vor%

Wie oben definiert, ersetzt dies die Eigenschaften eines bestimmten Typs, aber Sie können Eigenschaften nach Namen ersetzen, wenn Sie eine höhere Auflösung benötigen.

    
Colonel Panic 25.09.2012 16:06
quelle
0

Fügen Sie einfach ein Editor-Attribut zu Ihrer Klasse hinzu.

    
Daniel Brückner 11.05.2009 17:51
quelle

Tags und Links