DataGridでEnterキーで移動させる

Web上にあるソースを参考にして書いてみましたが、行を移動する部分がいまいちこれでいいのかどうか疑問。
もしこうすればいいよ!というご意見あればお願いします。m(__)m

public class CustomDataGrid : DataGrid{
public CustomDataGrid()
: base() {
}
protected override void OnKeyDown(KeyEventArgs e) {
if (e.Key == Key.Enter) {
this.MoveNextCell();
e.Handled = true;
};
base.OnKeyDown(e);
}
protected override void OnGotFocus(RoutedEventArgs e) {
base.OnGotFocus(e);
if (this.CurrentColumn != null) {
this.BeginEdit();
}
}

private void MoveNextCell() {
DataGridColumn currentcol = this.CurrentColumn;

// 現在のカラムが最大かどうか
bool isLastCol = (currentcol.DisplayIndex == this.Columns.Count - 1);

if (!isLastCol) {
// 編集を終了して次へ
this.CommitEdit();
this.CurrentColumn = this.Columns[currentcol.DisplayIndex + 1];
this.BeginEdit();
}
else {
int nextIndex = this.SelectedIndex+1;
if(this.ItemsSource is ICollection){
ICollection lists = (ICollection)this.ItemsSource;
if(nextIndex<= (lists.Count-1)){
this.CurrentColumn = this.Columns[0];
this.SelectedIndex = nextIndex;
}
}
}
}
}

このソース中で ItemSourceがICollectionであればという比較を行っているのですが、こんな感じでいいのかどうかっていうことです。(たいていはこれで当てはまるはず?)
あと、OnGotFocusで編集状態に入るようにすると行移動したときにも編集状態に入るんですが、2回イベントが起こるので何とかならないかと思います(-_-;