为什么在更新HierarchicalData dataProvider时AdvancedDataGrid不会更新?

时间:2009-02-26 20:05:50

标签: flex actionscript-3 hierarchical-data advanceddatagrid

我有一个带有HierarchicalData dataProvider的AdvancedDataGrid(ADG):

<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}"/>

当我最初在Model中设置HierarchicalData实例时,它会按预期显示:

function buildHierarchicalData(parentItems:ArrayCollection):void
{
    __model.myHierarchicalData = new HierarchicalData();

    __model.myHierarchicalData.source = parentItems;
}

parentItems 是ParentItem valueObjects的集合:

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

        public var label:String;
    }
}

但是,当我将子项从一个父项移动到另一个父项时(通过拖放),使用以下代码无法看到更新:

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

然而,出于某种原因,这可行:

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

为什么我必须更新ArrayCollection的来源???

3 个答案:

答案 0 :(得分:1)

this。在处理ArrayCollection时,建议始终使用可绑定的dataProviders

答案 1 :(得分:1)

非常感谢我指导我找到答案。我现在不再需要在我的模型中使用HierarchicalData属性,而是在MXML中设置Hierarchical dataProvider:

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

答案 2 :(得分:0)

尝试

IHierarchicalCollectionView(__model.myHierarchicalData).refresh();