更新视图spark.components.List

时间:2010-09-23 15:48:09

标签: actionscript-3 listview flex4 flash-builder

我在itemRenderer中使用List组件。主要用户交互涉及在一个渲染器中从List中拖动一个项目并将其放入另一个渲染器中。

我的问题:当数据对象更新时,我希望根据数据提供者(dp)中的对象数量修改列表的高度,该对象从数据对象传递给List。现在我试图使List的显示无效,刷新它的dp并尝试将此行assets.length > 0 ? assetList.percentHeight = 100 : assetList.height = 10;放在其他事件处理程序中,例如dragdrop处理程序,dp的集合事件处理程序等。我也尝试刷新dp用于使用此渲染器的List组件。视图最终会更新,但前提是我调整列表大小,或者使用滚动条,或者当我开始拖动新的List项目时,但从不在删除之后。

<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>

1 个答案:

答案 0 :(得分:0)

在你的onDataChange方法中试试这个:

itemRenderer = null;
itemRenderer = new ClassFactory(DefaultRenderer);