/// <summary>
        /// Grab the best suited handler for dragging.
        /// </summary>
        /// <param name="wrapper"></param>
        /// <param name="eventData"></param>
        /// <returns></returns>
        private static DragHandlerBase FindBestDragHandler(ItemCollectionSlotUIBase wrapper, PointerEventData eventData)
        {
            DragHandlerBase best = null;

            foreach (var handler in dragHandlers)
            {
                if (handler.CanUse(wrapper, eventData) && (best == null || handler.priority > best.priority))
                {
                    best = handler;
                }
            }

            return(best);
        }
        public static UIDragModel OnBeginDrag(ItemCollectionSlotUIBase originalWrapper, PointerEventData eventData)
        {
            if (draggingItem != null)
            {
                Debug.LogWarning("Item still attached to cursor, can only drag one item at a time", draggingItem.gameObject);
                return(null); // Can only drag one item at a time
            }

            currentDragHandler = FindBestDragHandler(originalWrapper, eventData);
            if (currentDragHandler == null)
            {
                return(null);
            }

            var toDrag = CreateDragObject(originalWrapper);
            var lookup = currentDragHandler.OnBeginDrag(toDrag, eventData);

            if (OnStartDragging != null)
            {
                OnStartDragging(lookup, toDrag, eventData);
            }

            return(lookup);
        }