воскресенье, 18 декабря 2011 г.

DisplayText для ComboBox элементов в WinForms

Многие стандартные контролы в WinForms при отображении списков элементов объектов (контролы типа ComboBox), используют возвращаемое этими объектами значение метода ToString(). Вообще, использование метода ToString() в этих целях является стандартным подходом и используется также в других библиотеках WinForms, например в DevExpress контролах.

Интересно, сколько различных способов существует для придания спискам объектов нужного представления. Кто-то наследуется от класса, который нужно отобразить, и переопределяет его метод ToString(). Иногда, что на мой вгляд хуже всего, пытаются в классах модели определить их представление и уже в них самих переопределяют ToString(). Кто-то использует словари (Dictionary) для сопоставления отображаемого текста с объектами. Можно использовать Binding.

Есть еще парочка известных мне методов, но я предпочитаю варант предсталенный ниже. Это некоторая общая обертка (Generic Wrapper), которая содержит всего два свойства: объект и его желаемое отображаемое значение:

class DisplayItem {
     public DisplayItem(T value, String dispText) {
         Value = value;
         DisplayText = dispText;
     }

     public T Value { get; set; }
     public String DisplayText { get; set; }

     public override string ToString() {
         return DisplayText ;
     }
}