1

我有一个ArrayCollection我们称之为“项目”的东西。它本质上是分层数据的平面集合(每个项目都有ParentChildren属性)。我想AdvancedDataGrid以分层形式显示数据,所以基本上我可以这样做,它会显示得很好:

// Note: RootItems would be an ArrayCollection that is updated so only the
// top level items are within (item.Parent == null).
var hd:HierarchicalData = new HierarchicalData(model.RootItems);
var hcv:HierarchicalCollectionView = new HierarchicalCollectionView(hd);

myDataGrid.dataProvider = hdc;

这可行,但我希望能够在更新集合myDataGrid时看到更新(因为不会获取任何子项的更新,只会获取顶级任务)。有什么简单的方法可以做到这一点?我猜我必须创建一个扩展类,并在更改时以某种方式提醒它,但这听起来会很慢。提前感谢您提供的任何帮助!ItemsRootItemsHierarchicalDataItems

4

1 回答 1

2

您有两种选择来解决这个问题。要么创建自己的实现IHierarchicalData(它不必扩展HierarchicalData,在这种特殊情况下不会有太多可以重用的代码),要么稍微改变处理数据的方式,使其符合标准用例:

[Bindable] // make it bindable so that the HierarchicalCollectionView gets notified when the object changes
class Foo // your data class
{
    // this constructor is needed to easily create the rootItems below
    public function Foo(children:ArrayCollection = null)
    {
        this.children = children;
    }

    // use an ArrayCollection which dispatches an event if one of its children changes
    public var children:ArrayCollection;

    // all your other fields
}

// Create your rootItems like this. Each object can contain a collection of children
// where each of those can contain children of its own and so forth...
var rootItems:ArrayCollection = new ArrayCollection([
    new Foo(
        new ArrayCollection([
            new Foo(),
            new Foo(),
            new Foo(
                new ArrayCollection([
                    // ...
                ]),
            new Foo()
        ])
    ),
    new Foo(
        // ...
    ),
    // ...
]);

// Create the HierarchicalData and HierachicalCollectionView
var hd:IHierarchicalData = new HierarchicalData(rootItems);

[Bindable]
var hcv:IHierarchicalCollectionView = new HierarchicalCollectionView(hd);

然后你可以在你的 ADG 中使用hcvasdataProvider并使用它的方法来添加和删除项目。每当您添加、删除或更新项目时,ADG 都会刷新。

我建议您以标准方式进行操作,除非那确实不可能。

于 2011-04-04T18:08:00.443 回答