我试着用observablecollection创建一个,看看
ObservableCollection<Emp> _empList = new ObservableCollection<Emp>();
public Window1()
{
InitializeComponent();
_empList .Add(new Emp("1", 22));
_empList .Add(new Emp("2", 18));
_empList .Add(new Emp("3", 29));
_empList .Add(new Emp("4", 9));
_empList .Add(new Emp("5", 29));
_empList .Add(new Emp("6", 9));
list@R_199_2419@1.DisplayMemberPath = "Name";
list@R_199_2419@1.ItemsSource = _empList;
Style itemContainerStyle = new Style(typeof(List@R_199_2419@Item));
itemContainerStyle.Setters.Add(new Setter(List@R_199_2419@Item.AllowDropProperty, true));
itemContainerStyle.Setters.Add(new EventSetter(List@R_199_2419@Item.PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(s_PreviewMouseLeftButtonDown)));
itemContainerStyle.Setters.Add(new EventSetter(List@R_199_2419@Item.DropEvent, new DragEventHandler(list@R_199_2419@1_Drop)));
list@R_199_2419@1.ItemContainerStyle = itemContainerStyle;
}
拖放过程
void s_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (sender is List@R_199_2419@Item)
{
List@R_199_2419@Item draggedItem = sender as List@R_199_2419@Item;
DragDrop.DoDragDrop(draggedItem, draggedItem.DataContext, DragDropEffects.Move);
draggedItem.IsSelected = true;
}
}
void list@R_199_2419@1_Drop(object sender, DragEventArgs e)
{
Emp droppedData = e.Data.GetData(typeof(Emp)) as Emp;
Emp target = ((List@R_199_2419@Item)(sender)).DataContext as Emp;
int removedIdx = list@R_199_2419@1.Items.IndexOf(droppedData);
int targetIdx = list@R_199_2419@1.Items.IndexOf(target);
if (removedIdx < targetIdx)
{
_empList.Insert(targetIdx + 1, droppedData);
_empList.RemoveAt(removedIdx);
}
else
{
int remIdx = removedIdx+1;
if (_empList.Count + 1 > remIdx)
{
_empList.Insert(targetIdx, droppedData);
_empList.RemoveAt(remIdx);
}
}
}
注意: