3 Stimmen

Anzahl der Quellensammlungen ist 0 newitemplaceholder wird nicht angezeigt

Nach dem Löschen aller Elemente in der gebundenen Sammlung ist datagrid.items.count 1 und das einzige Element in der Elementsammlung ist newitemplaceholder, aber das Datagrid zeigt den newitemplaceholder nicht an. Dies kann nur auftreten, wenn das letzte Element der newitemplaceholder ist und Sie versuchen, es zu bearbeiten, aber anstatt die Eingabetaste zu drücken, klicken Sie auf die Schaltfläche, die das Löschereignis auslöst.

Da das ausgewählte Element aufgrund des Bearbeitungsereignisses kein neuer Platzhalter mehr ist, wird das Element als neues Element in der Ausgangssammlung betrachtet.

Vor dem Aufruf des Löschvorgangs ist in der Datentabelle eine item.count von 2 vorhanden.

Jede Hilfe auf, wie man die newitemplaceholder zu bekommen, um in dieser seltsamen Situation zu zeigen?

0voto

sarh Punkte 5926

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X