【发布时间】:2012-01-05 13:32:15
【问题描述】:
我有一个模型类,其中包含一组经常变化的数字变量。 它们都调度自定义事件,因此是可绑定的。
在我的 UI 中,其中一些类实例被捆绑到一个 ArrayList 中,该 ArrayList 用作 Spark DataGrid 的数据提供者。 类变量的变化非常好,所以问题出现了。
我现在想做的是根据传入的数据更改这些数字的颜色格式(确切地说是网格列中的相应标签),也就是说,当新值是大,当新值小于旧值时变为红色。
我怎样才能做到这一点?我想对旧值进行某种缓存,然后比较旧值和新值。 这是这样做的方法吗,如果是这样,怎么做?还是有另一种可能更简单的方法而无需缓存任何东西?
任何帮助将不胜感激!
编辑: 根据@NoobsArePeople2 给出的示例,这是我当前的代码。 首先是数据网格。 dataProvider 是一个包含 myModel 类对象的 ArrayList。
<s:DataGrid dataProvider="{_listItems}" >
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="change" headerText="Change" itemRenderer="tableCell">
<s:GridColumn dataField="bid" headerText="Bid" itemRenderer="tableCell">
...
</s:DataGrid>
现在是 tableCell 渲染器;
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" width="100%" height="100%">
<fx:Script>
<![CDATA[
private var previousData:Number;
private var labelColor:uint;
private var _data:Object;
override public function set data(value:Object):void {
previousData = _data;
_data = Number(value);
invalidateProperties();
}
override protected function commitProperties():void {
super.commitProperties();
if(previousData < data) {
labelColor = 0x40c040;
} else if (previousData > data){
labelColor = 0xf05050;
} else
labelColor = 0xc0c0c0;
itemLabel.setStyle("color", labelColor);
itemLabel.text = String(_data);
}
]]>
</fx:Script>
<s:Label id="itemLabel"/>
</s:GridItemRenderer>
到目前为止,这工作正常(与使用引发未定义错误的数据属性相反),但是,当将这个项目渲染器用于多个网格列时,它对每个网格列使用相同的值。这是关于什么的?
编辑:对不起,这只有在我直接处理模型的属性时才有效,比如 data.property,这是我做不到的。我需要所有列的通用项目渲染器。
【问题讨论】:
标签: apache-flex data-binding datagrid itemrenderer datagridcolumn