Posts Tagged ‘AdvancedListBase’

拖拉物件從ListBase 到 AdvancedListBase

Monday, April 7th, 2008

把傳統的ListBase item 拖拉到 AdvancedListBase 基本上是不會成功的,因為在DragSource::dataFormat,一個是”items”, 一個是”treeDataGridItems” ,我們可在DragDrop發生之前,用DragSource::addData()改變DragEvent::dragSource 內資料定義即可, 這樣ADG就會Accept Drop了(會顯示Drop Feedback)

function onDragEnter(event:DragEvent):void{
event.dragSource.addData( myObject , "treeDataGridItems" );
}

發現一些好用的方法:
可以得到目前拖放物件在List中的索引位置!

AdvancedListBase::calculateDropIndex ( event:DragEvent ) : int

藉由索引值取得對應的itemRenderer instance

AdvancedListBase::indexToItemRenderer( index :int ):IListItemRenderer

結合兩者:

function onDragDrop(event:DragEvent){
var ir:IListItemRenderer = adg.indexToItemRenderer( adg.calculateDropIndex (event ) );
var myData:Object = ir.data;
var hv:HierarchicalCollectionView = adg.dataProvider as HierarchicalCollectionView;
//取得父節點,插入新物件
var parentNode : Object = hv.getParentItem( myData );
var myNewData:Object = event.dragSource.dataForFormat("treeDataGridItems"); //取出新物件
hv.addChildAt( parentNode, myData , 0 ); //放入

adg.validateNow();
}