New to Telerik UI for WPF? Download free 30-day trial

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

In this article