数据网格XAML中阻止列重新排序到特定目标显示索引

mbskvtky  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(123)

我有一个xaml DataGrid,它有10列。我可以重新排序列,但我想阻止重新排序组内的列。
例如,用户可以将第9列重新排序为第5列(现在可以),但第9列不应允许拖动小于第4列。
我想限制基于显示索引的列重新排序。
我试图使用“ColumnReordering”事件,但无法找到拖放列的放置位置索引,因此我可以阻止它。
your text

grid.ColumnReordering += Grid_ColumnReordering;

private void Grid_ColumnReordering(object sender, DataGridColumnReorderingEventArgs e) 
{ 
    object DropLocationIndicator = e.DropLocationIndicator; 
    object Dragindicator = e.DragIndicator; 
    // Drag column
     var column = e.Column;

     //find target display index and block it
     if (targetdisplayindex > 4)
     {
         e.Cancel = false;
     }
     else
     {
        e.Cancel = true;
     }
}
nwsw7zdq

nwsw7zdq1#

ColumnReordering事件在目标显示索引已知之前引发。您可以使用它来存储原始的列索引,然后处理ColumnDisplayIndexChanged以根据您的逻辑将列移回。就像这样:

private int _displayIndex;

private void OnColumnReordering(object sender, DataGridColumnReorderingEventArgs e)
{
    _displayIndex = e.Column.DisplayIndex;
}

private void OnColumnDisplayIndexChanged(object sender, DataGridColumnEventArgs e)
{
    DataGrid dataGrid = (DataGrid)sender;
    int newIndex = e.Column.DisplayIndex;
    int oldIndex = _displayIndex;

    // if (some condition...)
    // switch back:
    dataGrid.ColumnDisplayIndexChanged -= OnColumnDisplayIndexChanged;
    e.Column.DisplayIndex = oldIndex;
    dataGrid.ColumnDisplayIndexChanged += OnColumnDisplayIndexChanged;
}

相关问题