Frage

Ich verwende den folgenden Code in meinem Viewmodel zu löschen Elemente aus einer Sammlung:

UnitMeasureCollection.CollectionChanged += new NotifyCollectionChangedEventHandler(ListOfUnitMeasureCollectionChanged);

void ListOfUnitMeasureCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if (e.Action == NotifyCollectionChangedAction.Remove)
    {
        if (NavigationActions.DeleteConfirmation("Delete Item.", "Are you sure you want to delete this item? This action cannot be undone."))
        {
            foreach (UnitMeasureBO item in e.OldItems)
            {
                UnitMeasureBO unitMeasureBO = item as UnitMeasureBO;
                bool inUse = unitMeasureRepository.UnitMeasureInUse(unitMeasureBO.UnitMeasureValue);
                if (inUse == true)
                {
                    NavigationActions.ShowError("Cannot delete item", "This item cannot be deleted because it is used elsewhere in the application.");
                }
                else
                {
                    unitMeasureRepository.DeleteUnitMeasure(unitMeasureBO.UnitMeasureValue);
                }
            }
        }
    }
}

Ich habe einen Datagrid, die zur Sammlung gebunden ist. Ich frage mich, ob es überhaupt zum Aufheben der Aktion Entfernen ist in der Bestätigungsaufforderung basiert? Ich bemerkte NotifyCollectionChangedEventArgs nicht über ein Verfahren abzubrechen. Was passiert, wenn ein Benutzer ein Element aus dem Datenraster löscht aber wählt ‚Nein‘ auf der Bestätigung, die Artikel nach wie vor aus dem Datenraster entfernt wird. Es ist nicht aus der Datenbank gelöscht und wenn das Datagrid aufgefrischt wird, wird es wieder angezeigt. Ich bin mit dem mvvm Muster und ich ziehe, dies zu tun, ohne meine Datenraster codieren zu müssen. Jede Hilfe ist willkommen.

War es hilfreich?

Lösung

Nun, man kann nicht entfernen Aktion während einer Collection Veranstaltung abzubrechen.

Mein Vorschlag: Wenn Sie MVVM verwenden, sollten Sie eine DeleteCommand irgendwo haben, die ausgelöst wird, wenn die DeleteKey im Datagrid gedrückt wird. In der Execute () -Methode dieses Befehls sollten Sie:

  1. Stellen Sie die Bestätigung.
  2. Wenn der Benutzer ja wählt, dann entfernen Sie das Element aus der Sammlung. Diese Entfernung sollte direkt auf dem Datenraster reflektiert werden.
  3. Wenn der Benutzer wählt, nein, nichts zu tun.

Das bedeutet aber, dass die DataGrid.CanUserDeleteRows auf false gesetzt ist, da man im Grunde steuern müssen, wenn die Zeilen gelöscht.

Hope, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top