Drag and drop from list box to RadSchedule view through commands

2 posts, 0 answers
  1. bonDaviD
    bonDaviD avatar
    2 posts
    Member since:
    Aug 2011

    Posted 15 Dec 2011 Link to this post

    Hi,

    I am trying to implement the drag and drop functionality between the RadScheduleView and listbox. I have followed the samples provided by telerik to implement the task. I have a converter named "ScheduleViewToAppointmentConverter" and also ScheduleVIewDragDropBehaviour class to implement the custom drag drop behaviour. In the Beaviour class i have override the Drop method and there i got my custom appointment Deal though State. And i can add it to the destination source and the new dragged item will be displayed in my schedule view. The code snippet for the behaviour class is as follow . Here eventhogh i get the dragged data in the drop menthod i coudnt communicate with the view model.


    public class ScheduleViewDragDropBehavior : Telerik.Windows.Controls.ScheduleViewDragDropBehavior
       {
           public override IEnumerable<IOccurrence> ConvertDraggedData(object data)
           {
               if (DataObjectHelper.GetDataPresent(data, typeof(Deal), false))
               {
                   return ((IEnumerable)DataObjectHelper.GetData(data, typeof(Deal), false)).OfType<IOccurrence>();
               }
               return base.ConvertDraggedData(data);
           }
     
     
           public override void Drop(Telerik.Windows.Controls.DragDropState state)
           {
               if (state.SourceAppointmentsSource == state.DestinationAppointmentsSource)
               {
                   base.Drop(state);
               }
               else
               {
                   var appointmentToAdd = state.Appointment as Deal;
                   appointmentToAdd.Subject = "Boney";
                   appointmentToAdd.Start = state.DestinationSlots.First().Start;
                   appointmentToAdd.End = state.DestinationSlots.First().End;
                   (state.DestinationAppointmentsSource as ObservableCollection<Deal>).Add(appointmentToAdd);
               }
           }
            
       }

    Here Deal is my custom appointment class.

    Now i want to implement the drag and drop through commands, so that i can get the dragged data in the view model  and from there I can assign it to the appointment collection for binding to schedule view after checking some validations. How can i implement the drag and drop though commands.?

    Also i  have 2  resource named "Main" and "Side" in the schedule view. If i am dragging it main ,  I have check whether the any appointment already exists there , if so drop cannot happen So which is the best place to implement these kind of validations .
  2. Valeri Hristov
    Admin
    Valeri Hristov avatar
    2252 posts

    Posted 20 Dec 2011 Link to this post

    Hi,

    Regarding the drag-drop with commands: you could create ICommand dependency properties on your custom drag-drop behavior (it is a DependencyObject) and bind them to the corresponding properties in the ViewModel. The behavior inherits the data context of RadScheduleView so the binding should not be a problem.

    As for the validation, I would recommend using the CanDrop method of the drag-drop behavior - if you return false the cursor will change accordingly and the experience will be consistent.

    Kind regards,
    Valeri Hristov
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

  3. DevCraft banner
Back to Top