2009-02-26 5 views
1

J'ai un AdvancedDataGrid (ADG) avec un HierarchicalData dataProvider:Pourquoi AdvancedDataGrid ne se met pas à jour lorsque le fournisseur de données HierarchicalData est mis à jour?

<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 un Collection de ParentItem valueObjects:

package 
{ 
    [Bindable] 
    public class ParentItem 
    { 
     public var children:ArrayCollection; 

     public var label:String; 
    } 
} 

Cependant, whe n Je déplace des é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, cela ne fonctionne:

function moveChildren(movedChildren:Array /* of ParentItem */):void 
{ 
    parentItem.children.source = movedChildren; 
} 

Pourquoi dois-je mettre à jour la source de l'ArrayCollection ???

+0

Essayez de faire des enfants Bindable. – dirkgently

+0

Je suis désolé, il est liable dans mon code (voir le post ci-dessus). –

Répondre

1

Merci à Dirkgently pour m'avoir dirigé 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 fournisseur de données hiérarchique droit dans le MXML:

<mx:AdvancedDataGrid xmlns:mx="http://www.adobe.com/2006/mxml"> 
    <mx:dataProvider> 
     <mx:HierarchicalData source="{__model.parentItems}" /> 
    </mx:dataProvider> 
</mx:AdvancedDataGrid> 
1

Voir this. Il est recommandé d'utiliser un ArrayCollection toujours lisible lorsque vous traitez avec dataProviders.

+0

Merci pour le lien. J'ai trouvé ma réponse là-bas. –

+0

En fait, cela a rendu mon code plus agréable, mais n'a pas résolu mon problème. La classe est connectable, mais le fournisseur de données ne se met toujours pas à jour correctement sauf si je mets à jour la source de l'élément. –

+0

Je vous souhaite bonne chance :) – dirkgently

0

Essayez

IHierarchicalCollectionView(__model.myHierarchicalData).refresh(); 
Questions connexes