如何在Xamarin.Mac中的NSTableView中拖放行时设置动画效果

如何在Xamarin.Mac中的NSTableView中拖放行时设置动画效果,xamarin,xamarin.mac,Xamarin,Xamarin.mac,我可以在mac的NSTableView中重新排序行,即从一个索引位置拖放到另一个索引位置,但在拖放行时无法获得任何效果。如何设置行重新排序的任何样式。我已经在TableViewDataSource中使用了三种重写方法进行行重新排序,即1.WriteRows 2.ValidateDrop 3.AcceptDrop。请提前提出任何想法,谢谢。您可以在AcceptDrop方法中执行UITableView.MoveRow,并通过NSAnimationContext延长行间可视移动的持续时间: 注意:这不

我可以在mac的NSTableView中重新排序行,即从一个索引位置拖放到另一个索引位置,但在拖放行时无法获得任何效果。如何设置行重新排序的任何样式。我已经在TableViewDataSource中使用了三种重写方法进行行重新排序,即1.WriteRows 2.ValidateDrop 3.AcceptDrop。请提前提出任何想法,谢谢。

您可以在
AcceptDrop
方法中执行
UITableView.MoveRow
,并通过
NSAnimationContext
延长行间可视移动的持续时间:

注意:这不会对数据源中的数据进行重新排序,如果需要保留用户的新数据顺序,则必须手动对该数据进行重新排序,以便
UITableView。重新加载数据
将显示正确的顺序

public override bool AcceptDrop(NSTableView tableView, NSDraggingInfo info, nint row, NSTableViewDropOperation dropOperation)
{
    var rowData = info.DraggingPasteboard.GetDataForType(typeof(Product).FullName);
    if (rowData == null)
        return false;
    var dataArray = NSKeyedUnarchiver.UnarchiveObject(rowData) as NSIndexSet;

    NSAnimationContext.BeginGrouping();
    NSAnimationContext.CurrentContext.Duration = 1;
    foreach (var originalIndex in dataArray.ToArray())
    {
        tableView.MoveRow((nint)originalIndex, row);
    }
    NSAnimationContext.EndGrouping();

    return true;
}