quinta-feira, fevereiro 10, 2011

DataGrid WPF forçar Refresh

A minha tortura com as DataGrid do WPF continua. Agora o meu problema é que eu queria depois de adicionar uma linha, trabalhar os dados que estão binded com base nos valores que preenchi quando estava a adicionar a linha.

Primeiro raciocínio, devo ter um evento que me indique que a row foi adicionada, é só agarrar-me a ele e fazer o meu processamento. Aí vou eu agarrar-me ao evento RowEditEnding e faço o código que queria para alterar a row adicionada , fazendo o Refresh dos Items no fim. Executo o código e pimba estou a levar com uma excepção: " 'Refresh' não é permitido durante uma transacção AddNew ou EditItem ".

Depois de pesquisar um bocado, a solução mirabolante é desregistar o evento, fazer Commit da DataGrid, fazer o processamento que quero, forçar o Refresh e finalmente voltar a registar o evento.
private void MyRowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
   dGrid.RowEditEnding -= MyRowEditEnding;
   dGrid.CommitEdit();

   //O meu processamento à lista que está binded
          
   dGrid.Items.Refresh();
   dGrid.RowEditEnding += MyRowEditEnding;
}

Sem comentários: