0

以前の投稿に基づいて、列ヘッダーをリストボックスにドラッグしてグループ化する機能を追加した 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>
4

1 に答える 1