Я использую компонент List внутри itemRenderer. Основное взаимодействие с пользователем включает в себя перетаскивание элемента из списка в один визуализатор и перенос его в другой.Обновление зрения spark.components.List
Моя проблема: при обновлении объекта данных я хочу, чтобы высота списков изменялась в соответствии с количеством объектов в dataprovider (dp), которое передается в List из объекта данных. Теперь я попытался аннулировать отображение списка, обновить его dp и попытался поместить эту строку assets.length > 0 ? assetList.percentHeight = 100 : assetList.height = 10;
в другие обработчики событий, такие как обработчики dragdrop, обработчики событий коллекции для dp и т. Д. Я также попытался обновить dp для списка компонент, который использует этот рендерер. В конечном итоге представление будет обновляться, но только если я изменил размер списка или воспользуюсь скроллером, или когда я начну перетаскивать новый элемент списка, но никогда после его удаления.
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
autoDrawBackground="true" width="100%" creationComplete="init()" currentState="collapsed">
<fx:Script>
<![CDATA[
[Bindable] private var itemRenderer:ClassFactory;
[Bindable] private var colWidth:Number = 100;
[Bindable] private var assets:ArrayCollection = new ArrayCollection;;
public function init():void{
itemRenderer = new ClassFactory(DefaultRenderer);
this.addEventListener(FlexEvent.DATA_CHANGE, onDataChange);
}
private function onDataChange(e:FlexEvent):void {
assets = data.assets;
trace(data.name, assets.length);
assets.length > 0 ? assetList.percentHeight = 100 : assetList.height = 10;
}
]]>
</fx:Script>
<s:Group width="100%">
<s:layout>
<s:VerticalLayout gap="0" />
</s:layout>
<s:ToggleButton
id="viewToggle"
label="{data.name}"
width="100%"
height="50"
/>
<s:List id="assetList"
width="100%"
dataProvider="{assets}"
height = "10"
top="0" left="0" bottom="0" right="0"
dragEnabled="true"
allowMultipleSelection="true"
dragMoveEnabled="true"
dropEnabled="true"
itemRenderer="{itemRenderer}"
>
<s:layout>
<s:TileLayout requestedColumnCount="2"
horizontalGap="0" verticalGap="0"
columnWidth="{colWidth}" rowHeight="{colWidth}"/>
</s:layout>
</s:List>
</s:Group>
</s:ItemRenderer>