0

私はそのようなクラスのインスタンスにバインドされているsparkListコントロールを使用しています:

[Event(name="collectionChange", type="mx.events.CollectionEvent")]
public class HierarchicalCollectionListAdapter extends EventDispatcher implements IList
{
...
}

このコレクションが「reset」collectionChangeイベントを送信するたびに、リストを完全に再描画したいと思います。これを実現するには、コレクションの更新後、毎回次のコードを呼び出す必要があります。

var _itemRenderer:IFactory = _list.itemRenderer;
_list.itemRenderer = null;
_list.itemRenderer = _itemRenderer; 

よりエレガントな方法でそれを行う方法はありますか?

4

2 に答える 2

0

ここで何が起こっているのかを確認するのは少し難しいですが、リストdataProviderが拡張されていないようで、ListCollectionView使用できませんrefresh()

ただし、を使用して再描画を強制できる場合がありますinvalidateDisplayList()

私はこのようなことを試みます:

_list.dataGroup.invalidateDisplayList();
于 2013-01-24T03:53:04.540 に答える
0

誰かが同じ問題を抱えている場合に備えて、ここに解決策を残しておきます。

私ができる最善のこと-コレクションの更新時に毎回更新される拡張リストコントロールを作成します。したがって、スパークリストに基づいて新しいコントロールを作成し、そこに次のコードを追加します。

<fx:Script>
    <![CDATA[
        import mx.collections.IList;
        import mx.events.CollectionEvent;
        import mx.events.CollectionEventKind;

        /**
         * Subscribe to collection change event.
         */
        override public function set dataProvider(value:IList):void
        {
            if (dataProvider)
                dataProvider.removeEventListener(CollectionEvent.COLLECTION_CHANGE,
                    dataProvider_collectionChangeHandler);

            if (value)
                value.addEventListener(CollectionEvent.COLLECTION_CHANGE, _collectionChangeHandler, false, 0, true);

            var _itemRenderer:IFactory = this.itemRenderer;
            this.itemRenderer = null;
            this.itemRenderer = _itemRenderer; 

            super.dataProvider = value;
        }

        /**
         * If collection has changed - redraw list by resetting itemRenderer.
         */
        private function _collectionChangeHandler(event:Event):void
        {
            if (event is CollectionEvent)
            {
                var ce:CollectionEvent = CollectionEvent(event);

                // We don't need to refresh if any collection element will change.
                if(ce.kind != CollectionEventKind.UPDATE)
                {
                    var _itemRenderer:IFactory = this.itemRenderer;
                    this.itemRenderer = null;
                    this.itemRenderer = _itemRenderer;
                }
            }
        } 

    ]]>
</fx:Script>
于 2013-01-25T06:27:31.107 に答える