DataBoundControl (базовый класс для ListControl / ListBox) содержит метод PerformSelect, этот метод извлекает данные из адаптера (если он существует)
Но тот, кто (в Microsoft) , создавший ListControl, отверг метод PerformSelect и не включил адаптер в их переопределение, тем самым удалив адаптивность - благодаря этому вы не сможете просто создать свой собственный метод PerformDataBindingкак и предполагалось природой.
Не все потеряно, хотя в вашем DataBoundControlAdapter вы можете присоединить к методу привязки данных ListBox получить ObjectDataSource, извлечь данные «вручную», вызвать метод PerformDataBinding и затем отменить ObjectDataSource изповторный вызов (иначе все, что вы делаете, будет переопределено) .
Как видно из следующего уродливого "хака".
void listBox_DataBinding(object sender, EventArgs e)
{
ObjectDataSource ods = listBox.DataSourceObject as ObjectDataSource;
if (ods != null)
{
IEnumerable data = ods.Select();
PerformDataBinding(data);
ods.Selecting += (s, ev) => { ev.Cancel = true; };
}
}
Я почти склонен кскажем, что вам будет лучше "подклассифицировать" ListBox, нотак как вы используете адаптер, я думаю, это то, что вы на самом деле не хотите делать?