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