如何强制所有Tree itemrenrerers刷新?

时间:2010-04-06 18:18:27

标签: flex actionscript tree

我在mx.controls.Tree中有项目渲染器,我需要按需刷新。

我在updateDisplayList中有代码,无论我做什么,它都只触发一些可见节点。我试过触发他们都应该倾听的改变;我已经尝试清除并重置dataProvider和itemRenderer属性。

        private function forceCategoryTreeRefresh(event : Event = null) : void
        {
            trace("forceCategoryTreeRefresh");

            var prevDataProvider : Object = CategoryTree.dataProvider;
            CategoryTree.dataProvider = null;
            CategoryTree.validateNow();
            CategoryTree.dataProvider = prevDataProvider;

            var prevItemRenderer : IFactory = CategoryTree.itemRenderer;
            CategoryTree.itemRenderer = null;

            CategoryTree.itemRenderer = prevItemRenderer as IFactory;

            _categoriesChangeDispatcher.dispatchEvent(new Event(Event.CHANGE));
        }

当我将节点滚动到视图中时,节点会正确刷新(例如.data设置),但我不能强制已经存在的节点刷新或重置自己。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

尝试在更改事件上调用此函数:

private function refreshList(e:Event):void{
          listName.invalidateSize();
          listName.invalidateList();
          listName.invalidateDisplayList();
          listName.validateSize(true);
          listName.validateNow();
        }

对我来说工作得很好

答案 1 :(得分:0)

尝试 treeView.dataProvider = treeView.dataProvider;

那应该更新树视图。

答案 2 :(得分:-1)

Flex中的ItemRenderers是虚拟化的,因此每个Tree节点不会总有一个ItemRenderer。

但是,您可以使节点无效以强制刷新。 this question的答案给出了如何做到这一点的例子。