我有ArrayCollection
我们称之为“项目”。它本质上是一个分层数据的扁平集合(每个项目都有Parent
和Children
属性)。我希望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
集合时查看Items
中的更新(因为RootItems
无法获取任何子级的更新,只有顶级任务)。有没有简单的方法来做到这一点?我猜我必须创建一个扩展HierarchicalData
的类,并在Items
更改时以某种方式提醒它,但这听起来很慢。提前感谢您提供的任何帮助!
答案 0 :(得分: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中使用hcv
作为dataProvider
,并使用其方法添加和删除项目。每当您添加,删除或更新项目时,ADG都会刷新。
我建议你采用标准方式,除非这是不可能的。