Pergunta

Eu tenho um aplicativo WPF muito simples no qual estou usando vinculação de dados para permitir a edição de alguns objetos CLR personalizados.Agora estou querendo colocar alguma validação de entrada quando o usuário clicar em salvar.No entanto, todos os livros do WPF que li não dedicam nenhum espaço a esse assunto.Vejo que você pode criar ValidationRules personalizadas, mas estou me perguntando se isso seria um exagero para minhas necessidades.

Então minha pergunta é esta:existe um bom exemplo de aplicativo ou artigo em algum lugar que demonstre as melhores práticas para validar a entrada do usuário no WPF?

Foi útil?

Solução

Acho que a nova forma preferida pode ser usar IDataErrorInfo

Consulte Mais informação aqui

Outras dicas

Do MS Documentação de padrões e práticas:

Validação de dados e relatório de erros

Seu modelo ou modelo de visualização geralmente será necessário para executar a validação de dados e sinalizar qualquer erro de validação de dados para a visualização para que o usuário possa atuar para corrigi -los.

Silverlight e WPF fornecem suporte para gerenciar erros de validação de dados que ocorrem ao alterar as propriedades individuais que estão vinculadas a controles na visualização.Para propriedades únicas que são ligadas a dados a um controle, o modelo ou modelo de exibição pode sinalizar um erro de validação de dados dentro do conjunto de propriedades rejeitando um valor ruim recebido e lançando uma exceção.Se a propriedade ValidateSonexceptions na ligação dos dados for verdadeira, o mecanismo de ligação de dados no WPF e o Silverlight lidará com a exceção e exibirá uma sugestão visual ao usuário de que existe um erro de validação de dados.

No entanto, lançar exceções com propriedades dessa maneira deve ser evitado sempre que possível.Uma abordagem alternativa é implementar as interfaces Idataerrorinfo ou InotifyDataerrorinfo em suas classes de modelo de visualização ou modelo.Essas interfaces permitem que seu modelo de exibição ou modelo execute a validação de dados para um ou mais valores de propriedade e retorne uma mensagem de erro à visualização para que o usuário possa ser notificado do erro.

A documentação continua explicando como implementar IDataErrorInfo e INotifyDataErrorInfo.

pessoalmente, estou usando exceções para lidar com a validação.requer as seguintes etapas:

  1. na sua expressão de vinculação de dados, você precisa adicionar "ValidatesOnException=True"
  2. no objeto de dados ao qual você está vinculando, você precisa adicionar o manipulador DependencyPropertyChanged, onde verifica se o novo valor atende às suas condições - se não - você restaura o valor antigo do objeto (se necessário) e lança uma exceção.
  3. no modelo de controle usado para exibir valores inválidos no controle, você pode acessar a coleção de erros e exibir mensagens de exceção.

o truque aqui é vincular apenas a objetos que derivam de DependencyObject.a simples implementação de INotifyPropertyChanged não funcionaria - há um bug na estrutura que impede o acesso à coleta de erros.

Verifique também Este artigo.Supostamente a Microsoft lançou seu Biblioteca Empresarial (v4.0) de seus padrões e práticas onde eles cobrem o assunto de validação, mas só Deus sabe por que eles não incluíram validação para WPF, então a postagem do blog para a qual estou direcionando você explica o que o autor fez para adaptá-lo.Espero que isto ajude!

Você pode estar interessado no Biblioteca de livros exemplo de aplicação do Estrutura de aplicativo WPF (WAF).Mostra como usar a validação no WPF e como controlar o botão Salvar quando existem erros de validação.

Se sua classe de negócio é usada diretamente pela sua UI é preferível usar IDataErrorInfo porque coloca a lógica mais próxima de seu proprietário.

Se sua classe de negócios for uma classe stub criada por uma referência a um serviço WCF/XmlWeb, você não poderá/não deverá usar IDataErrorInfo nem lançar Exception para uso com ExceptionValidationRule.Em vez disso, você pode:

  • Use ValidationRule personalizado.
  • Defina uma classe parcial em seu projeto de UI do WPF e implemente IDataErrorInfo.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top