Инициализация и обновление привязок данных

хотя на словах это представляется

Реализация методов Beginlnit И Endlnit Интерфейса ISupportlnitialize Предотвращает выполнение привязки данных во время инициализации, для чего устанавливается флаг , Проверяемый методом UpdateDataBinding, И привязка данных откладывается, пока инициализация не будет завершена явным вызовом UpdateDataBinding Из метода Endlnit. Для реализации метода UpdateDataBinding Вам нужно войти в источник данных, найти коллекцию данных, специфицируемую компонентом данных, и произвести итерацию по элементам данных, чтобы отобразить столбчатые диаграммы. Хотя на словах это представляется не особенно сложным, реализация может оказаться весьма запутанной, если принять во внимание, что источник данных мог бы быть набором данных, таблицей данных, массивом, специальной коллекцией, списком списков списков и т. д. Охват всех этих сценариев может стать очень сложным. По существу здесь нужно взять источник данных и попытаться привести его к типу одного из различных интерфейсов, описанных в главе 7. Как только вы выясните, к какому типу относится коллекция, вы сможете использовать реализацию интерфейса и DataMember Для определения действительного списка данных, к которому вам нужно привязаться. К счастью, реализация большей части этой неприятной работы экспонируется через метод класса ListBindingHelper С именем GetList.

Сначала метод проверяет, не производится ли инициализация элемента управления; в этом случае он ничего не делает. Если элемент управления не инициализируется, метод убеждается, что у него есть по крайней мере источник данных и идентификатор строки, с которыми можно работать. Затем он вызывает метод GetList Класса ListBindingHelper. Этот метод делает за вас массу непростой работы, связанной с различными интерфейсами, обсуждавшимися в главе 7. В принципе его действия сводятся к следующему. Сначала он проверяет источник данных на предмет реализации интерфейса IListSource. Если интерфейс реализован, он использует метод GetList этого интерфейса для получения списка. Затем метод проверяет компонент данных и пытается разрешить его на источнике данных, чтобы возвратить в качестве списка. Метод проходит по кругу еще несколько раз, обрабатывая различные комбинации вроде списка списков, есть компонент данных или его нет и т. д., но по существу он занимается поиском действительной коллекции IList По переданному источнику и компоненту данных. Если пригодную для работы коллекцию найти не удается, вспомогательный метод привязки данных прекращает попытки и возвращает Null.