WPF DATAGRID 实现拖拽换行
时间: 2024-05-14 12:12:17 浏览: 13
WPF DataGrid可以通过实现拖拽换行来改变数据行的顺序。以下是实现方法:
1. 首先,在DataGrid的XAML中添加以下属性:AllowDrop="True"和PreviewMouseLeftButtonDown="DataGrid_PreviewMouseLeftButtonDown"。
2. 在DataGrid的代码中添加以下事件处理程序:
```
private void DataGrid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var source = e.OriginalSource as DependencyObject;
var row = FindVisualParent<DataGridRow>(source);
if (row != null)
{
DragDrop.DoDragDrop(row, row.DataContext, DragDropEffects.Move);
e.Handled = true;
}
}
private void DataGrid_Drop(object sender, DragEventArgs e)
{
var target = e.OriginalSource as DependencyObject;
var row = FindVisualParent<DataGridRow>(target);
if (row != null)
{
var data = e.Data.GetData(typeof(object));
var sourceIndex = DataGrid.Items.IndexOf(data);
var targetIndex = DataGrid.Items.IndexOf(row.DataContext);
if (sourceIndex != targetIndex)
{
var temp = DataGrid.Items[sourceIndex];
DataGrid.Items.RemoveAt(sourceIndex);
DataGrid.Items.Insert(targetIndex, temp);
}
}
}
private static T FindVisualParent<T>(DependencyObject child) where T : DependencyObject
{
var parent = VisualTreeHelper.GetParent(child);
if (parent == null) return null;
var parentT = parent as T;
return parentT ?? FindVisualParent<T>(parent);
}
```
3. 在DataGrid的XAML中添加Drop事件处理程序:Drop="DataGrid_Drop"。
实现了以上步骤后,就可以通过拖拽来改变数据行的顺序了。