2015-12-20 75 views
1

我有ListEmployee。我只想執行簡單的拖放操作。即從SourceListBox中拖出Employee,並在TargetListBox中加上Employee Object。 我有兩個問題。 去除SourceListBox員工給了我一個例外,在TargetListBox顯示的值不是Employee對象,但該字符串Drag_and_Drop.Employee拖放對象列表框

 private List<Employee> emp = new List<Employee>(); 
emp.Add(new Employee { EmployeeId = 1, Name = "Arslan" }); 
      emp.Add(new Employee { EmployeeId = 2, Name = "Talha" }); 

SourceListBox.ItemsSource = emp; 
      SourceListBox.DisplayMemberPath = "Name"; 
      SourceListBox.SelectedValuePath = "EmployeeId"; 

private void SourceListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 

      DragDropEffects dde = DragDrop.DoDragDrop(SourceListBox, SourceListBox.SelectedItem, DragDropEffects.All); 

      var empi = (Employee) SourceListBox.SelectedItem; 

      if(dde == DragDropEffects.All) 
      { 
       emp.Remove(empi); 
       SourceListBox.ItemsSource = null; 
       SourceListBox.ItemsSource = emp; 
      } 
     } 

    private void TargetListBox_DragEnter(object sender, DragEventArgs e) 
     { 
      e.Effects = DragDropEffects.All; 
      TargetListBox.Items.Add(e.Data.GetData(typeof(Employee))); 
     } 
+0

我不知道你的問題的確切答案,但如果你「只是想執行簡單的拖放」,最好使用一些庫,這使得它更容易。實施拖放自己就是一種方式,充滿了痛苦,錯誤和很大的機會,您的解決方案將不具備美觀的界面。例如 - https://github.com/punker76/gong-wpf-dragdrop - 你可以在3行代碼中進行拖放。 –

回答

0

基本例如從C# Drag and Drop From listBox

public object lb_item = null; 

private void listBox1_DragLeave(object sender, EventArgs e) 
{ 
    ListBox lb = sender as ListBox; 

    lb_item = lb.SelectedItem; 
    lb.Items.Remove(lb.SelectedItem); 
} 

private void listBox1_DragEnter(object sender, DragEventArgs e) 
{  
    if (lb_item != null) 
    { 
     listBox1.Items.Add(lb_item); 
     lb_item = null; 
    } 
} 


private void listBox1_MouseDown(object sender, MouseEventArgs e) 
{ 
    lb_item = null; 

    if (listBox1.Items.Count == 0) 
    { 
     return; 
    }     

    int index = listBox1.IndexFromPoint(e.X, e.Y); 
    string s = listBox1.Items[index].ToString(); 
    DragDropEffects dde1 = DoDragDrop(s, DragDropEffects.All);  
} 

private void Form1_DragDrop(object sender, DragEventArgs e) 
{    
    lb_item = null; 
} 

和擴大知識面http://www.codeproject.com/Articles/5883/Two-ListBoxes-Drag-and-Drop-Example

+0

沒有幫助,因爲它是WinForms,我在WPF中工作,沒有這樣的方法'IndexFromPoint' –