Flex:对象属性更改不更新AdvancedDataGrid

时间:2012-02-08 19:26:41

标签: actionscript-3 flex

我正在使用AdvancedDataGrid来显示分层数据。 DataProvider是一个对象,children字段是一个对象的ArrayCollection。当我更新ArrayCollection中的一个对象时,我想要刷新网格。

经过研究,我明白这不会自动发生。即使我使用itemUpdated()然后刷新AC也没有。即使我调用executeBindings(递归)也没有。

我知道要聪明一点,我应该一直使用ObjectProxy,因为这可以解决我所有的问题。我现在的问题是如何在不完全修改我的Hierarchical Data对象的情况下解决这个问题?

我尝试让我的Value Objects扩展ObjectProxy但是没有做到这一点。有优雅的解决方案吗?类型对象甚至可以利用ObjectProxy类?

感谢任何有用的提示。

这是HierarchicalData代码:

<mx:HierarchicalData 
    source="{model.myObject}"
    childrenField="trades"/>  

这是'myObject'类:

[Bindable]
public class MyObject implements ValueObject
{
    public var qty:Number;
    public var status:String;
    public var comments:String;
    public var modified_by:String;
    public var modified_date:Date;
    public var trades:ArrayCollection = new ArrayCollection();
}

'trades'ArrayCollection包含一系列在此定义的Trade对象:

[Bindable]
public class Trade implements ValueObject
{
    public var selected:Boolean = false;
    public var quantity:Number;
    public var modified_by:String;
    public var modified_date:Date;

}

以下是我在服务器返回数据后填充集合的方法:

for ( var i:int=0;i<result.length;i++ ){
                var item:Object = result[i];

                var recall:MyObject       = new MyObject();
                recall.comments               = item.comments;

                recall.qty                    = item.qty;
                recall.status                 = item.status;
                recall.modified_by            = item.modified_by;
                recall.modified_date          = item.modified_date;

                recall.trades.addItem( item.trades );

                model.recalls.addItem( recall );
            }

2 个答案:

答案 0 :(得分:0)

您只需要为您的AdvancedDataGrid使用可绑定ArrayCollection作为dataProvider。您可以查看示例here

答案 1 :(得分:0)

一周前我遇到过这个问题。我终于找到了一个解决方案(这是我的应用程序的initialisationComplete处理程序):

// lets create the model
model = new ArrayCollection();
testPlanHierarchy = new HierarchicalData();

// lets create the bindings 
BindingUtils.bindProperty(testPlanHierarchy,"source",this,"model"); 
BindingUtils.bindProperty(testPlanADG,"dataProvider",this,"testPlanHierarchy")

testPlanADG当然是我的AdvancedDataGrid,我的model是一个类型化对象的ArrayCollection。

[Bindable]标记的元素为:

  • model
  • 键入的对象类