以前の投稿に基づいて、列ヘッダーをリストボックスにドラッグしてグループ化する機能を追加した WPF Datagrid があります DataGrid 列ヘッダーをドラッグしてラベルにドロップしますか? . 私が抱えている問題は、DoDragDrop 関数が呼び出されると、Datagrid のクリックによる並べ替え機能が無効になることです。列ヘッダーをドラッグアンドドロップしてグループ化する方法はありますが、クリックして並べ替えることができますか?
private void DataGridHeader_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
var header = e.OriginalSource as ContentControl;
if (header != null)
{
DragDrop.DoDragDrop(header, new DataObject(typeof(string), header.Content.ToString()), DragDropEffects.Move);
e.Handled = true;
}
}
}
private void ListBox_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(string)))
{
var columnName = (string)e.Data.GetData(typeof(string));
this.GroupedColumns.Add(columnName);
var sourceView = CollectionViewSource.GetDefaultView(this.DataGrid.ItemsSource);
sourceView.GroupDescriptions.Add(new PropertyGroupDescription(columnName));
sourceView.Refresh();
e.Handled = true;
}
}
XAML を介してイベントに接続しています
ListBox Name="HeaderListBox" VerticalContentAlignment="Center" ItemsSource="{Binding GroupedColumns}" AllowDrop="True" Margin="5" Drop="ListBox_Drop"
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<EventSetter Event="PreviewMouseMove" Handler="DataGridHeader_PreviewMouseMove"/>
</Style>
</DataGrid.ColumnHeaderStyle>