Pergunta

Estou usando o seguinte código no meu ViewModel para excluir itens de uma coleção:

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

Eu tenho um datagrid que está vinculado à coleção. Gostaria de saber se há de alguma maneira de cancelar a ação de remover com base no prompt de confirmação? Percebi que o notifyCollectionChangedEventArgs não possui um método de cancelamento. O que acontece é quando um usuário exclui um item do DataGrid, mas escolhe 'não' na confirmação, o item ainda é removido do DataGrid. Ele não é excluído do banco de dados e, se o datagrid estiver atualizado, ele aparecerá novamente. Estou usando o padrão MVVM e prefiro fazer isso sem precisar codificar meu datagrid. Qualquer ajuda é apreciada.

Foi útil?

Solução

Bem, você não pode cancelar uma ação de remover durante um evento de coleta.

Minha sugestão: se você estiver usando o MVVM, deve ter um deleteCommand em algum lugar que seja acionado quando o DeleteKey é pressionado no datagrid. No método Execute () deste comando, você deve:

  1. Pergunte a confirmação.
  2. Se o usuário escolher sim, remova o item da coleção. Essa remoção deve ser refletida diretamente no datagrid.
  3. Se o usuário não escolher, não faça nada.

Isso significa, porém, que o DataGrid.CanuserDeleterows está definido como falso, pois você basicamente precisa controlar quando as linhas são excluídas.

Espero que isto ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top