我有一个模型类,其中包含一堆经常变化的数字变量。他们都调度他们的自定义事件,因此是可绑定的。
在我的 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,这是我做不到的。我需要所有列的通用项目渲染器。