私は同じ問題に直面しました。さらに、ソース コレクション カウントが 0 の場合だけでなく、編集状態の最後の行でも発生しました。編集状態から削除すると、グリッドの下部にある新しいレコード行が消えます。これよりも優れたものは見つかりませんでした-かなり失礼で、あまり高速ではない解決策ですが、少なくとも私にとっては機能し、現在は何もないよりはましです。
grItems という名前の DataGrid、データ グリッド バインドに使用される Items プロパティを持つプライベート ビュー モデル参照 _vm を考えると、サンプル コードは次のようになります。
<DataGrid Name="grItems"
ItemsSource="{Binding Path=Items}"
UnloadingRow="DataGridUnloadingRow">
コードビハインド:
private void DataGridUnloadingRow(object sender, DataGridRowEventArgs e)
{
grItems.UnloadingRow -= DataGridUnloadingRow;
grItems.ItemsSource = null;
grItems.ItemsSource = _vm.Items;
grItems.UnloadingRow += DataGridUnloadingRow;
}
アップデート
後で、グリッドをスクロールする必要があるときにこれが機能しないことに気付きました.WPFの内部エラー「オフセットと長さが範囲外でした...」が発生していました。前に、項目リストと同じレベルで定義されたコマンドにバインドされた行ごとの削除ボタンがありました。そのため、コマンドを削除し、ビューでコード ビハインドを少し汚いトリックで使用する必要がありました。ビュー モデル コレクションからアイテムを削除する前に、グリッドのどこかにフォーカスを移動し、削除後にフォーカスを戻します。私の理解では、このトリックは新しく追加された行のある種の「コミット」を実行し、編集状態ではない行に対して削除アクションが実行されます。