我在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设置),但我不能强制已经存在的节点刷新或重置自己。
有什么想法吗?
答案 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的答案给出了如何做到这一点的例子。