Вы также можете расширить свой пользовательский объект данных с помощью
- связываемое логическое свойство:
_selected
, который обновляется через список взаимодействий.
- и событие, которое можно запустить из
это:
selectionChanged
.
В установщике selected
- если он действительно изменился - вы можете запустить свое собственное всплывающее событие selectionChanged
и захватить его там, где вам нужно.
SelectableItem.as - пользовательская структура данных, представляющая данные строки списка
[Bindable]
[Event(name="selectionChanged",type="flash.events.Event")]
public class SelectableItem
{
public static const EVENT_SELECTION_CHANGED:String = 'selectionChanged';
private var _selected:Boolean;
private var _name:String;
public function SelectableItem()
{
}
public function get selected():Boolean
{
return _selected;
}
public function set selected(value:Boolean):void
{
if (_selected != value)
{
_selected = value;
dispatchEvent(new Event(EVENT_SELECTION_CHANGED, true));
}
}
public function get name():String
{
return _name;
}
public function set name(value:String):void
{
_name = value;
}
}
MyDataGrid.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
allowMultipleSelection="true">
<fx:Script>
<![CDATA[
import mx.controls.listClasses.IListItemRenderer;
protected override function updateRendererDisplayList(r:IListItemRenderer):void
{
super.updateRendererDisplayList(r);
if (r && r.data)
r.data.selected = DataGrid(r.owner).isItemSelected(r.data);
}
]]>
</fx:Script>
</mx:DataGrid>
TestApplication.mxml
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
[Bindable]
private var list:ArrayCollection = new ArrayCollection();
protected function onCreationComplete(event:FlexEvent):void
{
for (var i:int = 0; i < 20; i++)
{
var item:SelectableItem= new SelectableItem();
item.name = 'Item ' + i;
item.addEventListener(SelectableItem.EVENT_SELECTION_CHANGED, onItemSelectionChanged);
list.addItem(item);
}
}
private function onItemSelectionChanged(event:Event):void
{
trace(event);
}
]]>
</fx:Script>
<my:MyDataGrid dataProvider="{list}" width="100%" height="100%" />
Надеюсь, это поможет.