RadContextMenu.DropDownOpened 在 RadGridView.CurrentRow 更改之前调用

RadContextMenu.DropDownOpened called before RadGridView.CurrentRow is changed

我正在尝试根据 RadGridView 中当前选定的行更改 RadContextMenu 中的项目(编辑:OrderList)。如果当前行中的数据绑定项目具有正确的 属性 值,我希望启用该项目。

问题是当我直接右击某一行打开RadContextmenu时,CurrentRow还没有更新,所以DropDownOpened用旧行调用。 如果我左键单击或双击右键,它工作正常。

这里有一些代码:

OrderMenu.DropDownOpened += OrderMenu_DropDownOpened;

和方法

private void OrderMenu_DropDownOpened(object sender, EventArgs e)
{
    GoToParentOrderBtn.Enabled = GetSelectedOrder()?.ParentOrderId != null;
}

private OrderViewModel GetSelectedOrder()
{
    return (OrderViewModel)OrderList.CurrentRow.DataBoundItem;
}

使用dataGridView.EndEdit(); 此函数提交并结束对当前正在编辑的单元格的编辑操作。

更多信息here

抱歉没有说明我使用的是 radgridview。

我找到了 related answer 帮助我解决了我的问题。 我最终对 RadGridView 进行了扩展(因此我可以在整个应用程序中使用它),它在 mousedown 上触发了一个事件:

public partial class RadExtendedGridViewController : RadGridView
{
    public RadExtendedGridViewController()
    {
        InitializeComponent();
        base.MouseDown += RadExtendedGridViewController_MouseDown;
    }

    private void RadExtendedGridViewController_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            var element = this.ElementTree.GetElementAtPoint(e.Location);
            GridDataCellElement cell = element as GridDataCellElement;
            if (cell?.RowElement is GridDataRowElement)
            {
                Rows[cell.RowIndex].IsSelected = true;
            }
        }
    }
}

然后我将 GetSelectedOrder 更改为使用 SelectedRows 而不是 Current:

    private OrderViewModel GetSelectedOrder()
    {
        return (OrderViewModel)OrderList.SelectedRows.FirstOrDefault()?.DataBoundItem;
    }

现在它按预期工作了。感谢您花时间帮助我:-)