2009-02-27 12 views
4

Ich möchte in einem propertygrid eine Dropdown-Liste zeigen, die einige "String" -Wert zeigen aber einen "int" Wert zurückgeben.. Net PropertyGrid DropDownList - Rückgabewert anders als Show-Wert

Zum Beispiel lassen setze ich diese Klasse bekam:

public class MyObjectOptions : StringConverter 
{ 
    public override bool GetStandardValuesSupported(ITypeDescriptorContext context) 
    { 
     return true; 
    } 

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) 
    { 
     MyObjectCollection mm = new MyObjectCollection(); 

     List<String> names = new List<String> 
     foreach (MyObject m in mm) 
     { 
      m.Id // Need to store this somewhere ... 
      names.Add(m.Name); 
     } 

     return new StandardValuesCollection(name); 
    } 

    public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) 
    { 
     return true; 
    } 
} 

Hier ist meine Klasse Verwendung in der Propertysteuer

public class MyObjectProperty 
{ 
    [TypeConverter(typeof(MyObjectOptions))] 
    public int Id 
    { 
     get { return this.id; } 
     set { this.id = value; } 
    } 
} 

Wie Sie sehen können, möchte ich die ID der speichern, Objekt, aber ich möchte seinen Namen in der Dropdown-Liste zeigen ... Ich versuche, eine Hashtabelle verwenden, aber es funktioniert nicht ...

BTW - Ich verwende die Version 3.5 von .Net, aber ich benutze nur WinForm (nicht WPF).

Antwort

2

Sie können GetStandardValues ​​nicht dafür verwenden. Diese Methode wäre nützlich, wenn Sie Ihre Integer-Werte auf 1, 5 und 10 beschränken müssten.

Wenn Sie in Ihrem Eigenschaftswert Zeichenfolgen anzeigen möchten, müssen Sie nur die Methoden ConvertTo und ConvertFrom Ihres TypeConverter überschreiben . Das PropertyGrid wird die konvertierten Zeichenfolgen in der Dropdown-Liste verwenden.

Über Ihre Hashtabelle können Sie sie in Ihrem TypeConverter speichern, wenn ihr Inhalt statisch ist. Wenn es dynamisch ist, empfiehlt es sich, dass die Zielinstanz des Gitters es verwaltet. Von Ihrem Konverter aus können Sie über die Eigenschaft TypeDescriptorContext.Instance darauf zugreifen.

Hoffe, dass hilft.