1

I am using telrik RadDragAndDrop Tool with the ListBox. I am using silverlight with mvvm light. My question is that how should I use this code in ViewModel. This is a code behind file.

 public Construtor()
    {
        InitializeComponent();
        RadDragAndDropManager.AddDragQueryHandler(this, OnDragQuery);
        RadDragAndDropManager.AddDragInfoHandler(this, OnDragInfo);
        RadDragAndDropManager.AddDropQueryHandler(this, OnDropQuery);
        RadDragAndDropManager.AddDropInfoHandler(this, OnDropInfo);
    }
    private void OnDropInfo(object sender, DragDropEventArgs e)
    {
        ItemsControl box = e.Options.Destination as ItemsControl;
        IList<Section> itemsSource = box.ItemsSource as IList<Section>;
        Section section = e.Options.Payload as Section;

        if (e.Options.Status == DragStatus.DropComplete)
        {
            if (!itemsSource.Contains(section))
            {
                itemsSource.Add(section);
            }
        }
    }

    void OnDropQuery(object sender, DragDropQueryEventArgs e)
    {
        ItemsControl box = e.Options.Destination as ItemsControl;
        IList<Section> itemsSource = box.ItemsSource as IList<Section>;
        Section section = e.Options.Payload as Section;
        e.QueryResult = section != null && !itemsSource.Contains(section);
    }

    void OnDragInfo(object sender, DragDropEventArgs e)
    {
        ListBoxItem listBoxItem = e.Options.Source as ListBoxItem;
        ListBox box = ItemsControl.ItemsControlFromItemContainer(listBoxItem) as ListBox;
        IList<Section> itemsSource = box.ItemsSource as IList<Section>;
        Section section = e.Options.Payload as Section;
        if (e.Options.Status == DragStatus.DragComplete)
        {
            if (section != null && itemsSource.Contains(section))
            {
                itemsSource.Remove(section);
            }
        }
    }

    protected virtual void OnDragQuery(object sender, DragDropQueryEventArgs e)
    {
        ListBoxItem listBoxItem = e.Options.Source as ListBoxItem;
        ListBox box = ItemsControl.ItemsControlFromItemContainer(listBoxItem) as ListBox;
        if (e.Options.Status == DragStatus.DragQuery && box != null)
        {
            e.Options.Payload = box.SelectedItem;
            ContentControl cue = new ContentControl();
            cue.Content = box.SelectedItem;
            e.Options.DragCue = cue;
        }
        e.QueryResult = true;
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        SelectingQuestionsWindow window = new SelectingQuestionsWindow();
        window.Show();
        this.radExpander1.Visibility = System.Windows.Visibility.Visible;
    }

<*XAML*> This is my Xaml.

        <ListBox x:Name="SectionListBoxMain" Height="165" Width="200" SelectedItem="{Binding SelectedSectionList}"
                        DisplayMemberPath="SectionName" ItemsSource="{Binding SectionList}" ItemContainerStyle="{StaticResource draggableItemStyle}">

            <telerik:RadDragAndDropManager.AllowDrop>
                true
            </telerik:RadDragAndDropManager.AllowDrop>

        </ListBox>

        <TextBlock Width="20" />

        <ListBox x:Name="SectionListBox" Height="167" Width="200" ItemsSource="{Binding SelectedSectionList}" telerik:RadDragAndDropManager.AllowDrop="True" DisplayMemberPath="SectionName" ItemContainerStyle="{StaticResource draggableItemStyle}">

            </ListBox>

    </StackPanel>
R76
  • 446
  • 6
  • 25

1 Answers1

1

This is view logic that does not really belong in your ViewModel. It is probably better suited to a Behavior.

See this example: http://www.telerik.com/help/silverlight/raddraganddrop-within-radgridview.html

They use a Behavior and attach it to a grid to enable row reordering. You could start with something like:

public partial class ListDragDropBehavior : Behavior<ListBox>

You would need to add some dependency properties to bind to the other list box.

You can then use this Behavior on other list boxes by simply attaching it to the list box (i use blend to attach behaviors)