頻繁に変更される一連の Number 変数を持つモデル クラスがあります。それらはすべてカスタム イベントをディスパッチするため、バインド可能です。
私の UI では、これらのクラス インスタンスのいくつかが、Spark DataGrid のデータ プロバイダーとして機能する ArrayList にバンドルされています。クラス変数は完全に問題なく変更されるため、問題があります。
私が今やりたいことは、入ってくるデータに応じてこれらの数値の色の書式設定を変更することです (正確には gridcoloums の対応するラベル)。新しい値が古い値よりも小さい場合は赤色になります。
どうすればこれを機能させることができますか?古い値のある種のキャッシュについて考えてから、古い値と新しい値を比較します。これはこれを行う方法ですか?もしそうなら、どのように? または、何かをキャッシュする必要のない、おそらくもっと簡単な方法がありますか?
どんな助けでも大歓迎です!
編集: @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 プロパティの使用とは対照的です) が、複数のグリッド列に対してこのアイテム レンダラーを使用すると、各グリッド列に同じ値が使用されます。それは何についてですか?
編集:申し訳ありませんが、これは私ができない data.property などのモデルのプロパティに直接対処する場合にのみ機能します。すべての列に一般的なアイテム レンダラーが必要です。