Я столкнулся с похожими проблемами с DataGrid и несколькими средствами визуализации элементов и повторным использованием средств визуализации элементов при прокрутке. Чтобы получить доступ к средствам визуализации элементов DataGrid, я расширил DataGrid. Моей первой мыслью было использовать indicesToIndex (), а затем indexToItemRenderer (). К сожалению, эти методы не дали ожидаемого результата, поэтому я добавил метод indicesToItemRenderer ():
пакет com.whever.controls
{
import mx.controls.DataGrid;
import mx.controls.listClasses.IListItemRenderer;
public class CustomDataGrid extends DataGrid
{
public function CustomDataGrid()
{
super();
}
public function indicesToItemRenderer(rowIndex:int, colIndex:int):IListItemRenderer
{
var firstItemIndex:int = verticalScrollPosition - offscreenExtraRowsTop;
if (rowIndex < firstItemIndex ||
rowIndex >= firstItemIndex + listItems.length
)
{
return null;
}
return listItems[rowIndex - firstItemIndex][colIndex];
}
}
Чтобы разрешить повторно использованные средства визуализации элементов при прокрутке, обратитесь к этой статье:
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html
Это сводится к переопределению установщика данных и сохранению свойств в данных. Например, у меня был один столбец, использующий CheckBox itemRenderer, и другой столбец, использующий ComboBox. И то, и другое прислушивается к событию изменения и сохраняет выбранные, selectedIndex и т. Д. В данных всякий раз, когда изменяются свойства, и переопределяет установщик данных для установки этих свойств:
override public function set data(value:Object):void
{
if (value != null)
{
super.data = value;
if (data.hasOwnProperty('selected') && data.selected)
{
selected = data.selected;
}
else
{
selected = false;
}
}
}