DataGridは、同じ行内で作業をしているとCell間を移動しても編集内容が確定(commit)されないようです。
違う行にうつれば編集内容が確定されるのですが、同じ行内にボタンを用意して色々する場合などは、確定されていなくて困ることも多いと思います。
そんな時は、ボタンの関数に


if (sender != null && sender is Button)
{
    try
    {
        Button bt = sender as Button;
        testDataGrid.CommitEdit(); //testDataGridはDataGridのName
        //いろいろ処理
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
    }
}

かなりざっくりですがまぁこんな感じにしておくとうまく動きます。
CommitEdit()を使いましょうというお話でした。