Ich habe mit dem gleichen Problem konfrontiert, außerdem war es nicht nur passiert, wenn Quelle Sammlung zählen 0, aber für jede letzte Zeile in den Bearbeitungszustand - einmal aus dem Bearbeitungszustand gelöscht, neue Datensatz Zeile im unteren Teil des Rasters verschwindet. Ich habe nichts besseres als diese - ziemlich unhöflich und nicht sehr schnelle Lösung gefunden, aber zumindest funktioniert es für mich und derzeit ist das besser als nichts.
Angesichts des DataGrid mit dem Namen grItems und der privaten View Model-Referenz _vm mit der Items-Eigenschaft, die für die Datengitterbindung verwendet wird, könnte der Beispielcode wie folgt aussehen:
<DataGrid Name="grItems"
ItemsSource="{Binding Path=Items}"
UnloadingRow="DataGridUnloadingRow">
und den Code dahinter:
private void DataGridUnloadingRow(object sender, DataGridRowEventArgs e)
{
grItems.UnloadingRow -= DataGridUnloadingRow;
grItems.ItemsSource = null;
grItems.ItemsSource = _vm.Items;
grItems.UnloadingRow += DataGridUnloadingRow;
}
UPDATE
Später habe ich bemerkt, dass dies nicht funktioniert, wenn wir das Raster scrollen müssen - ich war immer einige interne WPF-Fehler 'Offset und Länge waren außerhalb der Grenzen...'. Früher hatte ich eine Schaltfläche zum Löschen pro Zeile, die an den Befehl gebunden war, der auf derselben Ebene wie die Elementliste definiert war. Also musste ich die Befehle loswerden und den Code in einer Ansicht mit einem kleinen schmutzigen Trick verwenden - bevor ich ein Element aus der Ansichtsmodellsammlung entferne, verschiebe ich den Fokus irgendwo außerhalb des Rasters und nehme ihn nach dem Löschen zurück. Nach meinem Verständnis dieser Trick führt eine Art von "Commit" der neu hinzugefügten Zeile, und Löschen Aktion wird auf die Zeile, die nicht in den Bearbeitungszustand durchgeführt.