从网上找到的,整理如下:
主要原因是DataGrid List Tree 等这些组件他们都使用了缓存的机制! 也就是说当你在页面中的DataGrid可以显示10行记录,,而你实际的数据源中存在20行记录。但是DataGrid也只是绘制了当前你所看到的10行记录,而不是20行记录,,那么绘制了10行记录,也就是说创建了当前的10个ItemRenderer,当你在滚动滚动条的时候你又看到了剩下的10行记录,而这10行记录所需要的ItemRenderer是不需要在重新绘制的(如果你使用的是默认的,怎样去掉这个缓存我也不清楚),它会从缓存中去提取! 所以如果你的数据源没有动态绑定,那么当你在进行滚动的时候就会出现这样的情况!
例如:当你的ItemRenderer中存在一个CheckBox,它的是否选中是根据数据原中的K值来决定,如果K为0则选中1为不选中,当你选中了这个CheckBox而没有改变K的值,当你在滚动回来的时候它会根据你的数据重绘这行,那么这个时候数据还是1则不会选中!
对于重写 ItemRenderer是最好的方式,,如果重写的话需要重写其 measure方法 和commitProperties 和updateDisplayList方法!
From:http://topic.csdn.net/u/20090818/18/0fac2e39-6735-41cc-b3f1-378143d32d0e.html
解决方法:
在自己定义的类上,绑定这个你要刷新的类型,然后放到itemRenderer中
如:
然后在view中使用itemRenderer的地方用:
注意visible=“{data.visible}”的地方,这里需要定义itemRenderer的操作方式等