Это сложный район;ниже приводится разбивка привязки winforms, но я понимаю, что привязка WPF ничем не отличается:
- для данного объекта первым делом код привязки будет искать
IListSource
- и еслипоэтому используйте GetList()
для получения фактической привязки (именно так таблица данных становится представлением данных для целей привязки) - , после этого источник обычно проверяется на
ITypedList
;это действует как гибкий способ получения псевдо-свойств (GetItemProperties()
), представленных моделью;представление данных реализует ITypedList
, создавая псевдосвойства для экземпляра - , в противном случае может быть возможно идентифицировать очевидный тип данных, что может означать:
- поиск индексатораформа
public SomeType this[int index] {get;}
- обратите внимание, что большинство коллекций будет удовлетворять этому - (не выполняется winforms, но может быть для WPF), разрешающему путем отражения
T
в IList<T>
или IEnumerable<T>
, если объектреализует эти интерфейсы - , берущий первый объект (если есть) из sorce и использующий
GetType()
- , когда тип известен,
TypeDescriptor.GetProperties(type)
может использоватьсяполучить свойства;во многих случаях это будет с помощью отражения, но также возможно добавить косвенный слой (через TypeDescriptionProvider
), чтобы предоставить свойства для типа (это может быть добавлено во время выполнения, что может быть очень удобно) - в случае индивидуальной привязки (не привязки к списку), есть также
TypeDescriptor.GetProperties(obj)
- в дополнение к отражению и TypeDescriptionProvider
, здесь также есть поддержка ICustomTypeDescriptor
, которая может быть реализована отдельным объектом для предоставления пользовательских свойств ввремя выполнения (очень похоже на TypeDescriptionProvider
, но с отдельным объектом, принимающим ответственность за свойства)
Я не знаю точно, насколько это относится к привязке WPF, но я уверен, чтообработка IListSource
и ITypedList
идентична.По памяти, большинство (все?) Стратегий winforms будут работать на WPF - так что это может быть, и изменения будут дополнительные ловушки.