刷新现有的DataGrid ItemRenderer

时间:2013-02-22 17:28:11

标签: flex actionscript

我有一个advancedDataGrid,其中包含一个自定义itemRenderer和一个网格外的单选按钮组。选择单选按钮时,我需要更新itemrenderer的显示状态。我正在使用带有properties属性的classfactory将参数传递给渲染器。

向网格添加新行时,itemrenderer会显示正确的显示状态,但是当我更改单选按钮时屏幕上已有的任何渲染器都不会刷新其显示。我尝试在datagrid上调用refresh(),invalidateList()和invalidateDisplayList(),将dataprovider设置为null然后重置它,将列上的itemrenderer属性设置为null然后重置它....没有什么能迫使渲染器更新。

网格位于tabNavigator中,因此如果我更改选项卡然后返回,渲染器都会重新绘制,但这不是可接受的解决方法。如何告诉网格销毁其所有当前渲染器并重新创建它们?

1 个答案:

答案 0 :(得分:2)

想出来。这是简化版。

<mx:AdvancedDataGrid 
    id="myDatagrid">
<mx:columns>
    <mx:AdvancedDataGridColumn 
            dataField="Full_Name">
    </mx:AdvancedDataGridColumn>
</mx:columns>
<mx:rendererProviders>
    <mx:AdvancedDataGridRendererProvider 
            renderer="{rendererFactory}"
            columnSpan="0"
            columnIndex="0"
            depth="2"/>
    <mx:AdvancedDataGridRendererProvider
            renderer="{anotherFactory}"
            columnIndex="0"
            columnSpan="0"
            depth="1"/>
</mx:rendererProviders>

如果更改{rendererFactory}(更新现有或创建新),则不会触发刷新。在对工厂进行更改后,我执行了myDatagrid.rendererProviders = myDatagrid.rendererProviders并触发了更新并回收了渲染器。