отмена удаления действия - NotifyCollectionChangedAction - PullRequest
3 голосов
/ 07 августа 2010

Я использую следующий код в моей viewmodel для удаления элементов из коллекции:

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

У меня есть сетка данных, связанная с коллекцией. Мне интересно, есть ли возможность отменить действие удаления на основании запроса подтверждения? Я заметил, что NotifyCollectionChangedEventArgs не имеет метода отмены. Что происходит, когда пользователь удаляет элемент из таблицы данных, но выбирает «нет» в подтверждении, элемент все еще удаляется из таблицы данных Он не удаляется из базы данных, и если сетка данных обновляется, она появится снова. Я использую шаблон mvvm и предпочитаю делать это, не кодируя сетку данных. Любая помощь приветствуется.

1 Ответ

6 голосов
/ 07 августа 2010

Ну, вы не можете отменить действие удаления во время события CollectionChanged.

Мое предложение: если вы используете MVVM, у вас должна быть команда DeleteCommand, которая срабатывает при нажатии DeleteKey в DataGrid. В методе Execute () этой команды вы должны:

  1. Спросите подтверждение.
  2. Если пользователь выбирает «да», то удалите элемент из коллекции. Это удаление должно быть непосредственно отражено в DataGrid.
  3. Если пользователь выбирает нет, ничего не делать.

Это означает, однако, что DataGrid.CanUserDeleteRows имеет значение False, поскольку вам в основном приходится контролировать, когда строки удаляются.

Надеюсь, это поможет.

...