2016-03-30 29 views
0

我有ListBoxes我動態創建(根據DB中的團隊數量)。 每個ListBox包含用戶對象。 我希望能夠將用戶從一個ListBox拖放到另一個。我能找到的所有示例都是從一個預定義的源列表拖放到另一個預定義目標ListBox使用MVVM拖放WPF中的多個列表框

這是如何實現的?

+0

這裏的事件處理程序是爲拖一個示例應用程序和刪除HTTP:// WWW .c-sharpcorner.com/uploadfile/dpatra/drag-and-drop-item-in-listbox-in-wpf/ –

+0

此示例針對兩個預定義的列表,並且該機制以單向方式工作。我需要多個列表與雙向方向 – user1630359

+0

只是鏡像其他列表的功能,是什麼問題? – icebat

回答

0

我現在沒有時間來測試這個,但是您可以嘗試將Joby鏈接中的事件附加到您的動態創建的ListBoxes上嗎?它看起來是這樣的:

// 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); 
}