Pourquoi est-AdvancedDataGrid pas mis à jour lorsque le HierarchicalData dataProvider est mis à jour?
-
09-09-2019 - |
Question
I ai un AdvancedDataGrid (ADG) avec une HierarchicalData dataProvider:
<mx:AdvancedDataGrid xmlns:mx="http://www.adobe.com/2006/mxml"
dataProvider="{__model.myHierarchicalData}"
displayItemsExpanded="true" sortExpertMode="true" dropEnabled="true"
sortableColumns="false" draggableColumns="false"
resizableColumns="true" textAlign="left" defaultLeafIcon="{null}"
folderOpenIcon="{null}" folderClosedIcon="{null}"/>
Quand je mets d'abord l'instance HierarchicalData dans le modèle, il est affiché comme prévu:
function buildHierarchicalData(parentItems:ArrayCollection):void
{
__model.myHierarchicalData = new HierarchicalData();
__model.myHierarchicalData.source = parentItems;
}
parentItems est une collection de ParentItem valueObjects:
package
{
[Bindable]
public class ParentItem
{
public var children:ArrayCollection;
public var label:String;
}
}
Cependant, quand je déplace les éléments enfants d'un parent à l'autre (par glisser-déposer), la mise à jour ne soit pas visible, en utilisant ce code:
function moveChildren(movedChildren:Array /* of ParentItem */):void
{
parentItem.children = new ArrayCollection(movedChildren);
}
Pour une raison quelconque, cependant, ce FONCTIONNE:
function moveChildren(movedChildren:Array /* of ParentItem */):void
{
parentItem.children.source = movedChildren;
}
Pourquoi dois-je mettre à jour la source du ArrayCollection ???
La solution
Merci à dirkgently pour me diriger vers la réponse. J'éliminais maintenant la nécessité d'une propriété HierarchicalData dans mon modèle, et la mise en place du droit dataProvider hiérarchique dans le MXML:
<mx:AdvancedDataGrid xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:dataProvider>
<mx:HierarchicalData source="{__model.parentItems}" />
</mx:dataProvider>
</mx:AdvancedDataGrid>
Autres conseils
Voir cette . Il est recommandé d'utiliser un ArrayCollection
bindable toujours en traitant avec dataProviders
.
Essayez
IHierarchicalCollectionView(__model.myHierarchicalData).refresh();