2013-08-06 2 views
0

Я хотел бы реализовать поле autocomplete string в PropertyGrid, которое может быть установлено на пользовательское значение.WinForms PropertyGrid: dynamic StandardValuesCollection change

Вот моя строка конвертер

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

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

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) 
    { 
     return new StandardValuesCollection(Globals.EntityCache.Select(e => e.Name).ToList()); 
    } 
} 

и я поставил его в качестве TypeConverter для свойства строки для редактирования.

Проблема в том, что может быть много стандартных значений. Поэтому я хотел бы отфильтровать их с помощью ввода, например. если я ввел «Foo», я увижу только строки, которые начинаются с «Foo» в раскрывающемся списке.

Возможно ли это каким-либо образом? Может быть, можно получить промежуточное значение свойства из контекста или любым другим способом?

ответ

1

Вы можете использовать параметр context и получить текущее значение свойства, что-то вроде этого:

public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) 
{ 
    // get the current property value 
    string value = (string)context.PropertyDescriptor.GetValue(context.Instance); 
    return new StandardValuesCollection(GetFilteredList(value)); 
} 
+0

Спасибо, хорошо работает. Фактически текстовое поле теряет фокус при нажатии кнопки выпадающего меню, поэтому текущее значение редактирования сохраняется в экземпляре. – shtaff

+0

Да, если вам нужно индивидуальное поведение, вы должны написать пользовательский UITypeEditor, что-то вроде этого: http://stackoverflow.com/questions/4305033/property-grid-create-new-instance-on-a-property –

Смежные вопросы