把傳統的ListBase item 拖拉到 AdvancedListBase 基本上是不會成功的,因為在DragSource::dataFormat,一個是"items", 一個是"treeDataGridItems" ,我們可在DragDrop發生之前,用DragSource::addData()改變DragEvent::dragSource 內資料定義即可, 這樣ADG就會Accept Drop了(會顯示Drop Feedback)
Actionscript:
-
function onDragEnter(event:DragEvent):void{
-
event.dragSource.addData( myObject , "treeDataGridItems" );
-
}
發現一些好用的方法:
可以得到目前拖放物件在List中的索引位置!
AdvancedListBase::calculateDropIndex ( event:DragEvent ) : int
藉由索引值取得對應的itemRenderer instance
AdvancedListBase::indexToItemRenderer( index :int ):IListItemRenderer
結合兩者:
Actionscript:
-
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();
-
}