2010-04-06 58 views
1

我在需要刷新的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)); 
     } 

节点刷新正常,当我滚动他们到视图(例如,。数据获取设置),但我不能强迫已经存在的刷新或重置自己的人。

任何想法?

回答

-1

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

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

2

尝试调用上的变化情况下,本功能:

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

为我工作得非常好

0

尝试 treeView.dataProvider = treeView.dataProvider;

这应该更新树视图。