2016-03-30 104 views
0

私はListBoxesを持っています(DB内のチームの数に応じて)動的に作成します。 各ListBoxには、ユーザーオブジェクトが含まれています。 ListBoxから別のものにユーザーをドラッグアンドドロップできます。私が見つけることができるすべての例は、1つの定義済みソースリストから予め定義された別のターゲットListBoxにドラッグアンドドロップすることでした。MVVMを使用してWPFの複数のリストボックスにドラッグ&ドロップする

これはどのように実装できますか?

+0

からあるドラッグのサンプル・アプリケーションで、HTTPをドロップ:// WWW .c-sharpcorner.com/uploadfile/dpatra/item-in-listbox-in-wpf/ –

+0

このサンプルはあらかじめ定義された2つのリスト用であり、メカニズムは一方向の方向に機能します。双方向の複数のリストが必要 – user1630359

+0

他のリストの機能をミラーリングするだけで問題はありますか? – icebat

答えて

0

私はこれを今すぐテストする時間がありませんが、Jobyのリンクからダイナミックに作成されたリストボックスにイベントを添付してみることができますか?それは次のようになります:ソースリンクが消えた場合には、ここで、完全を期すため

// Create an instance of the control 
var control = Activator.CreateInstance(ListBox); 

control.PreviewMouseLeftButtonDown += ListBox_PreviewMouseLeftButtonDown; 
control.Drop += ListBox_Drop; 

をイベントハンドラは、ここでhttp://www.c-sharpcorner.com/uploadfile/dpatra/drag-and-drop-item-in-listbox-in-wpf/

ListBox dragSource = null; 
private void ListBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    ListBox parent = (ListBox)sender; 
    dragSource = parent; 
    object data = GetDataFromListBox(dragSource, e.GetPosition(parent)); 

    if (data != null) 
    { 
     DragDrop.DoDragDrop(parent, data, DragDropEffects.Move); 
    } 
} 

#region GetDataFromListBox(ListBox,Point) 
private static object GetDataFromListBox(ListBox source, Point point) 
{ 
    UIElement element = source.InputHitTest(point) as UIElement; 
    if (element != null) 
    { 
     object data = DependencyProperty.UnsetValue; 
     while (data == DependencyProperty.UnsetValue) 
     { 
      data = source.ItemContainerGenerator.ItemFromContainer(element); 
      if (data == DependencyProperty.UnsetValue) 
      { 
       element = VisualTreeHelper.GetParent(element) as UIElement; 
      } 
      if (element == source) 
      { 
       return null; 
      } 
     } 
     if (data != DependencyProperty.UnsetValue) 
     { 
      return data; 
     } 
    } 

    return null; 
} 

#endregion 

private void ListBox_Drop(object sender, DragEventArgs e) 
{ 
    ListBox parent = (ListBox)sender; 
    object data = e.Data.GetData(typeof(string)); 
    ((IList)dragSource.ItemsSource).Remove(data); 
    parent.Items.Add(data); 
} 
関連する問題