2010-10-06 61 views
0

我需要检测Flex Spark List(spark.components.List)数据何时发生更改,以便以编程方式更改其滚动条。 我知道List是一个EventDispatcher,但不清楚我会注册哪个事件。当Flex Spark List的数据发生变化时检测到

编辑:我的列表dataProvider是一个ArrayCollection,也添加了元素。所以dataProvider永远不会被替换。我认为监听支持ArrayCollection,但是List可能会在我的侦听器(它改变了滚动条)之后对更改做出反应。因此,我的听众的变化将被列表所取代。

+0

您如何定义数据更改?当dataProvider被替换时? dataPRovider何时删除或添加了元素?或者是其他东西? – JeffryHouser 2010-10-06 18:07:11

+0

我正在使用相同的dataProvider实例。当我需要修改列表时,我只需从dataProvider中添加/删除数据。 – 2011-05-13 06:28:45

回答

1

为什么不添加一个EventListener到ArrayCollection并给它一个高priority?这将允许您监听数据收集本身的更新事件,并强制您的监听器首先发生。

编辑:我没有尝试过这个自己:^)

0

我不知道,如果它仍然是这样还是不行!但你可以做到以下几点: 为你的火花列表实施itemRenderer并使用itemRenderer的'dataChange'属性来查看你的数据何时被更改? 事情是这样的:

列表:

<s:List id="myList" dataProvider="{myArrayCollection}" 
     itemRenderer="myItemRenderer" ...> 
</s:List> 

现在对你的itemRenderer

<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" 
      dataChange={invalidateDisplayList()} > 
</s:ItemRenderer> 

例如在我的情况,我想删除我的列表中的每个项目,之后,我的itemRenderer可以通过'dataChange'自动更新自己...
虽然你可以使用o诸如invalidateSize()invalidateLayering()等关于您的需求。

相关问题