2010-11-26 2 views
1

Я делаю UserControl, где каждый может подключить список.C#: Свойство общего списка

Внутренне этот список отсортирован и программно добавлен в элемент ItemaSource.

Любой, кто хочет использовать эту UserControl необходимо использовать свойство ElementsDataSource

public List<T> ElementsDataSource {get;set;} 

List<T> не работает/компиляции, вместо этого я должен использовать List<object>.

Но тогда я должен отбрасывать объекты внутри ElementsDataSource снова родового типа, когда я отсортировать их внутренне и повторно использовать их и т.д. ...

Как я могу предложить общий список недвижимости на мой пользователь просто нравится. NET делает это?

Возможно, мой пользователь является плагином в List<Customer> или List<Department> и т.д. ... или я совершенно неправ и должен использовать List<Object>?

+2

будьте откровенны: что вы имеете в виду «не работает/компилируется»? – 2010-11-26 21:20:23

ответ

0

Обратите внимание, что .NET использует IEnumerable или Object как тип такого свойства. Затем он использует отражение, чтобы решить, как обрабатывать данные.

Вместо этого вы можете потребовать, чтобы ваш вызывающий абонент выполнял какую-либо сортировку или фильтрацию и просто предоставлял вам подготовленный IEnumerable.

Если вам нужно отобразить коллекцию объектов, и коллекция должна быть отсортирована внутри элемента управления, а коллекция должна иметь «естественный» порядок сортировки, тогда объект должен реализовать интерфейс IComparable<T>. Тогда вы можете обнаружить это путем переизбрания. Вам потребовалось бы, чтобы в коллекции были реализованы как IEnumerable<T>, так и IComparable<T>, чтобы вы могли делать «естественный» сортировку по элементам коллекции.

+0

Эй, Джон, сортировка не должна происходить внутри UserControl, потому что пользователь не должен заботиться об этом внутреннем процессе. Просто подключите Список к ElementsDataSource, клиенты сортируются относительно их сортировки, которые будут отображаться в UserControl в правильном порядке! – Elisabeth 2010-11-26 21:23:14

+1

Сортировка обычно считается внешним процессом, если пользовательский элемент управления предназначен для отображения. Элементы управления должны использовать данные, предоставленные им, если они не изменяют порядок сортировки на основе ввода пользователя: например, щелчок на заголовке сетки. В противном случае они должны просто делать то, что им говорят. – 2010-11-26 21:24:46

1

Если вы не хотите, чтобы сделать класс управления общим (это ваше решение List<T>), то, возможно, вы должны попробовать использовать List<ISomeInterface>, что все классы, используемые с этим контролем реализации?

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