2

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

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

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

4

1 回答 1

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 并触发了更新并回收了渲染器。

于 2013-02-25T14:20:27.623 回答