Edit this page

Drag-drop between ListBox and ScheduleView

To enable drag-drop between a ListBox and a RadScheduleView, on the ListBox should be attached a ListBoxDragDropBehavior and a DataConverter. The DataConverter should convert the dragged items from the ListBox into a ScheduleViewDragDropPayload and vice versa.

Following is an example demonstrating how to convert appointments between a ListBox and a ScheduleView:

  • Create the DataConverter:

        public class ScheduleViewToAppointmentConverter : DataConverter
        {       
            public override string[] GetConvertToFormats()
            {
                return new string[] { typeof(ScheduleViewDragDropPayload).FullName};
            }
    
            public override object ConvertTo(object data, string format)
            {
    
                if (format == typeof(ScheduleViewDragDropPayload).FullName && DataObjectHelper.GetDataPresent(data, typeof(Appointment), false))
                {
                    var appointments = (IEnumerable)DataObjectHelper.GetData(data, typeof(Appointment), false);
                    if (appointments != null)
                    {
                        return new ScheduleViewDragDropPayload(null, appointments.OfType<IOccurrence>().ToList());
                    }
                }           
                return null;
            }
        }
    
  • Add CustomScheduleViewDragDropBehavior class which inherits ScheduleViewDragDropBehavior:

        public class CustomScheduleViewDragDropBehavior : ScheduleViewDragDropBehavior
        {
            public override IEnumerable<IOccurrence> ConvertDraggedData(object data)
            {
                if (DataObjectHelper.GetDataPresent(data, typeof(Appointment), false))
                {
                    var appointments = DataObjectHelper.GetData(data, typeof(Appointment), true) as IEnumerable;
                    if (appointments != null)
                    {
                        return appointments.OfType<IOccurrence>();
                    }
                }
    
                return base.ConvertDraggedData(data);
            }
        }
    
  • The final configuration of the two controls in XAML should look like:

        <telerik:RadScheduleView ...>
            <telerik:RadScheduleView.ViewDefinitions>
                <telerik:WeekViewDefinition />
            </telerik:RadScheduleView.ViewDefinitions>
            <telerik:RadScheduleView.DragDropBehavior>
                <local:CustomScheduleViewDragDropBehavior />
            </telerik:RadScheduleView.DragDropBehavior>
        </telerik:RadScheduleView>
    
        <ListBox ...>
            <drag:ListBoxDragDrop.DataConverter>
                <local:ScheduleViewToAppointmentConverter />
            </drag:ListBoxDragDrop.DataConverter>
            <drag:ListBoxDragDrop.Behavior>
                <drag:ListBoxDragDropBehavior />
            </drag:ListBoxDragDrop.Behavior>    
        </ListBox>
    

    Here is the result:

dragdropmanager listboxandscheduleview

Was this article helpful? Yes No

Give article feedback

Tell us how we can improve this article

Dummy