/// <summary>
 /// Moves an event to a new start date (preserving duration) and updates labels.
 /// </summary>
 /// <param name="ev">Event to move</param>
 /// <param name="newStartDate">New start date for event</param>
 private void MoveEvent(Event ev, DateTime newStartDate)
 {
     var newRange = new TimeRange(ev.Start, ev.End);
     newRange.MoveToDate(newStartDate);
     UpdateEvent(ev, newRange);
 }
        /// <summary>
        /// Highlights destination cells during drag
        /// </summary>
        private void HandleDragging(object sender, DragEventArgs args)
        {
            var label = sender as DraggableView;

            if (label == null)
            {
                return;
            }

            var ev = label.BindingContext as Event;

            if (ev == null)
            {
                return;
            }

            var destinationPoint = GetDragDestinationPoint(args.Center, label);

            var newDate = GetDateAtPoint(destinationPoint);

            if (newDate.HasValue)
            {
                // Offset for this not being the first label of the event
                newDate = newDate.Value.AddDays(-_dragLabelDayOffset);

                var newRange = new TimeRange(ev.Start, ev.End);
                newRange.MoveToDate(newDate.Value);

                // Highlight target cells, un-highlight previously-targeted cells
                //
                HighlightCells(newRange.StartDate, newRange.EndDate);
            }
        }