1

私は、ListBoxでtelrik RadDragAndDropツールを使用しています。私はmvvmライトと銀色を使用しています。私の質問は、ViewModelでこのコードをどのように使うべきかということです。これはコードビハインドファイルです。 > ViewModelでRadDragAndDropのイベントを使用するには

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 *これは私の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> 

答えて

1

これは本当にあなたのViewModelに属していないビューロジックです。おそらく行動に適しています。 http://www.telerik.com/help/silverlight/raddraganddrop-within-radgridview.html

彼らは行動を使用して、行の並べ替えを有効にするには、グリッドにそれを添付:

は、この例を参照してください。

public partial class ListDragDropBehavior : Behavior<ListBox> 

他のリストボックスにバインドするには、いくつかの依存関係プロパティを追加する必要があります。

他のリストボックスにこのビヘイビアを使用することができます(ビヘイビアを付けるためにブレンドを使用します)

関連する問題