Executando validação em um objeto vinculado a dados após a atualização da propriedade
-
09-06-2019 - |
Pergunta
Eu tenho um formulário básico com controles vinculados a um objeto que implementa o INotifyPropertyChanged interface.Eu gostaria de adicionar alguma validação a algumas propriedades, mas não quero implementar IDataErrorInfo para validar algumas propriedades.
Criei as funções que realizam a validação e retornam a mensagem de erro (se for o caso) no objeto.O que eu gostaria de fazer é chamar essas funções do meu formulário quando as propriedades relevantes do objeto forem alteradas e configurar o ErroProvedor controle em meu formulário com quaisquer mensagens de erro que foram retornadas das funções de validação.
Tentei conectar manipuladores de eventos aos eventos Validating e LostFocus, mas eles parecem disparar antes que meu objeto seja atualizado e, portanto, não estão validando os dados corretos.Somente quando saio da caixa de texto, volto e saio novamente é que a validação é executada nos dados corretos.
Existe outro evento ao qual eu possa me conectar para poder chamar essas funções de validação depois que a propriedade do meu objeto for atualizada?Ou será melhor apenas implementar o IDataErrorInfo interface?
Solução
Não sei exatamente qual é o problema. Você está dizendo que não consegue definir a propriedade até que o controle perca o foco?
Nesse caso, você precisa definir a ligação para atualizar OnPropertyChanged
em vez de OnValidation
.
Vinculando a OnPropertyChanged
significa que a ligação é atualizada imediatamente, enquanto OnValidation
atualiza apenas o objeto subjacente quando uma validação é acionada (o que para a maioria dos controles ocorre quando eles perdem o foco).
Outras dicas
Acho que encontrei uma solução para o problema com a ajuda da postagem de Cameron.Alterei a ligação para atualizar OnPropertyChanged e agora, quando conecto o manipulador de eventos ao evento LostFocus, a validação está sendo executada no "novo" valor da caixa de texto, em vez do que foi mantido anteriormente no objeto