Может показаться - хотя это и немного догадка - что вы пытаетесь удалить разборщик вещей, одновременно изменяя его состояние («выбрано», нажав на него).
Вот мое решение для ситуации, в которой вы хотите удалить средство визуализации элементов, щелкнув по нему: просто сделайте так, чтобы оно отправляло всплывающее событие «удалить», и пусть какой-то контроллер обрабатывает удаление.
Так что ваш itemrender может выглядеть так:
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
]]>
</fx:Script>
<s:states>
<s:State name="normal" />
<s:State name="hovered" />
<s:State name="selected" />
</s:states>
<!-- some other stuff -->
<s:Button label="remove me" excludeFrom="normal"
click="dispatchEvent(new FlexEvent(FlexEvent.REMOVE, true))" />
</s:ItemRenderer>
Значение 'true' там является важным для того, чтобы событие всплыло до компонента List.
Затем в контроллере, который имеет ссылку на List (или DataGrid) или, возможно, в подклассе List (или DataGrid), вы перехватываете это событие и удаляете элемент.
theList.addEventListener(FlexEvent.REMOVE, handleRemoveRequest);
private function handleRemoveRequest(event:FlexEvent):void {
var itemRender:IItemRenderer = event.target as IITemrenderer;
var item:SomeClass = itemRender.data;
var index:int = theDataProvider.getItemIndex(item);
theDataProvider.removeItemAt(index);
}
Здесь важно, чтобы вы использовали target вместо currentTarget, поскольку первым будет ItemRenderer, а последним будет сам список.