У вас уже есть ответ, но вот прием, который мне нравится использовать.Что мне не нравится в использовании метода ToString () в вашей модели, так это то, что он смешивает бизнес и логику просмотра.
Вместо этого я создаю класс-оболочку (шаблон проектирования адаптера), который сохраняет ссылку намодель объекта и предоставляет собственный метод ToString.Вы можете комбинировать это с анонимными функциями, чтобы указать, как именно должна быть отображена отображаемая строка (вы можете захотеть отображать немного разные строки в разных списках).
Класс оболочки может выглядеть следующим образом:
class ListBoxWrapper<T>
{
private T obj;
private Func<T, string> stringFunction;
public ListBoxWrapper(T obj, Func<T, string> stringFunction)
{
this.obj = obj;
this.stringFunction = stringFunction;
}
public override string ToString()
{
return stringFunction(obj);
}
}
Чтобы просто использовать ToString () модели, вы все равно можете сделать:
ListBox.Items.Add(new ListBoxWrapper<Device>(device, dev => dev.ToString()));
Но вы также можете сделать (например):
ListBox.Items.Add(new ListBoxWrapper<Device>(device, dev => dev.SerialNumber.ToString()));
Чтобы сделатьэто более полезно, вы можете создать свой собственный класс, производный от ListBox или CheckedListBox, который автоматически обернет ваши объекты.Таким образом, вы также можете хранить строковую функцию в ListBox вместо каждого отдельного элемента.