Question

Je suis en utilisant le code suivant dans mon viewmodel à des éléments de suppression d'une collection:

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);
                }
            }
        }
    }
}

J'ai un DataGrid qui est lié à la collection. Je me demande s'il y a de toute façon d'annuler l'action de suppression en fonction de la demande de confirmation? J'ai remarqué NotifyCollectionChangedEventArgs ne dispose pas d'une méthode cancel. Ce qui se passe est lorsqu'un utilisateur supprime un élément de la grille de données, mais choisit « non » sur la confirmation, l'élément est encore retiré de la grille de données. Il n'est pas supprimé de la base de données et si le DataGrid est mise à jour, il apparaîtra à nouveau. J'utilise le modèle MVVM et je préfère le faire sans avoir à coder mon DataGrid. Toute aide est appréciée.

Était-ce utile?

La solution

Eh bien, vous ne pouvez pas annuler une action de suppression lors d'un événement CollectionChanged.

Ma suggestion: si vous utilisez MVVM, vous devriez avoir une part de DeleteCommand qui est déclenché lorsque la DeleteKey est enfoncée dans le DataGrid. Dans la méthode de cette commande Exécuter (), vous devez:

  1. Demandez la confirmation.
  2. Si l'utilisateur choisit oui, supprimer l'élément de la collection. Cette suppression devrait directement être répercuté sur le DataGrid.
  3. Si aucun utilisateur choisit, ne rien faire.

Cela signifie, bien que les DataGrid.CanUserDeleteRows est définie sur False puisque vous avez essentiellement à contrôler quand les lignes sont supprimés.

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top