Я не уверен, почему было бы полезно делать это для каждой строки, а не просто захватывать DataBinding и делать там, что вы хотите.Но если вы действительно хотите это сделать, просто выполните итерацию по источнику данных и вызовите событие:
public class ItemDataBoundArgs: EventArgs
{
public object Item;
}
public class MyListBox: ListBox
{
public event EventHandler ItemDataBound;
protected override void OnDataBinding(EventArgs e)
{
base.OnDataBinding(e);
if (ItemDataBound != null)
{
foreach (var item in (IEnumerable)DataSource)
{
var e= new ItemDataBoundArgs();
e.Item=item;
ItemDataBound(this,e);
}
}
}
}
Конечно, для этого DataSource должен быть IEnumerable, что не обязательно, такмог бы проверить это тоже.
Звучит как вопрос для интервью ...