I am having trouble getting a datagrid that is bound to an
XMLListCollection to update properly. The datagrid uses item
renderers for a couple of the columns which display a simple colored
image.
<mx:itemRenderer >
<mx:Component>
<mx:Canvas >
<mx:Image source="{data.MyImage}" />
</mx:Canvas>
</mx:Component>
</mx:itemRenderer>
This datagrid's dataProvider is set to bind to an XMLListCollection
variable which contains XML with one of the nodes being <MyImage>
This datagrid is a part of a module that gets loaded into a
TabNavigator control. When the module initializes I loop through each
row in the datagrid and check the values of the XML, and depending on
certain values, I update the content of the <MyImage> node, which in
turn will change the image source property.
When the module first loads, everything works fine and the grid
displays correctly.
The problem happens when I load a different module into the
tabNavigator. In a seperate module I do an update to this same
XMLListCollection. (I am using the Cairngorm framework and all my
shared data is stored in the model. ) When I reload the first module,
and the initialization logic fires, as I am looping through to do the
calculations to update the <MyImage> node I can see that everything is
updating in the XMLListCollection correctly.
However, when the dataGrid displays, the row that corresponds to the
updated XML in the XMLListCollection is displaying a blank row, even
though the underlying values are correct.
I believe this is a problem with the ItemRenderer not updating itself.
How do I force it to invalidate? I have tried doing a
dataGrid.dataProvider.refresh() and calling invalidateDisplayList()
etc. but cannot figure this one out.
One workaround I discovered is that when I reload the first module
after updating the underlying XMLListCollection, if I append a new
empty node to the XML like so: myXML.* += <empty /> Then the
updated row displays correctly!
Has anybody else out there ran into this problem?