0

我要求用户应该能够单击网格中的(可编辑)单元格,并且它会立即进入编辑模式,而不必双击按 F2。为此,我添加了一个行为:

public class AutomaticallyEditGridBehavior : Behavior<DataGrid>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        if (AssociatedObject.IsReadOnly)
        {
            return;
        }

        AssociatedObject.CurrentCellChanged += OnCurrentCellChanged;
    }

    private void OnCurrentCellChanged(object sender, EventArgs e)
    {
        // Check our column is not readonly first
        if (AssociatedObject.CurrentColumn.IsReadOnly)
        {
            return;
        }

        AssociatedObject.BeginEdit();
    }
}

我也有一些关于何时编辑单元格的逻辑,所以我添加了另一种行为:

public class CellEditEndedBehavior : Behavior<DataGrid>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.CellEditEnded += CellEditEnded;
    }

    private void CellEditEnded(object sender, DataGridCellEditEndedEventArgs e)
    {
        if (e.EditAction != DataGridEditAction.Commit)
        {
            return;
        }

        if (AssociatedObject.SelectedItem == null)
        {
            return;
        }

        // Some processing and logic to get next editable item

        // Set the focus to the next item and begin editing
        AssociatedObject.SelectedItem = nextEditableItem;
        AssociatedObject.CurrentColumn = e.Column;
        AssociatedObject.Focus();
        AssociatedObject.BeginEdit();
    }
}

我发现当我单击一个单元格时,第一个行为会运行,但在有机会编辑该单元格之前,CellEditEnded 事件已触发。因此,焦点移动到下一个对象,而不是刚刚单击的单元格。

为什么在实际编辑单元格之前触发此事件?有一个更好的方法吗?

4

0 回答 0