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 realmente nenhum espaço a esse problema. Vejo que você pode criar ValidationRules personalizadas, mas estou me perguntando se isso seria um exagero para minhas necessidades.
Portanto, minha pergunta é a seguinte: há um bom exemplo de aplicativo ou artigo em algum lugar que demonstra as melhores práticas para validar a entrada do usuário no WPF?
.net
wpf
data-binding
validation
Mark Heath
fonte
fonte
Da documentação de Padrões e Práticas da MS :
A documentação continua explicando como implementar IDataErrorInfo e INotifyDataErrorInfo.
fonte
Pessoalmente, estou usando exceções para lidar com a validação. requer as seguintes etapas:
o truque aqui é ligar apenas a objetos que derivam de DependencyObject. a implementação simples de INotifyPropertyChanged não funcionaria - há um bug no framework, que o impede de acessar a coleção de erros.
fonte
Verifique também este artigo . Supostamente, a Microsoft lançou sua Biblioteca Corporativa (v4.0) de seus padrões e práticas onde cobrem o assunto de validação, mas 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!
fonte
Você pode estar interessado no aplicativo de amostra BookLibrary do WPF Application Framework (WAF) . Mostra como usar a validação no WPF e como controlar o botão Salvar quando houver erros de validação.
fonte
Se sua classe de negócio for usada diretamente por sua IU, é preferível usar IDataErrorInfo porque coloca a lógica mais perto 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 pode / não deve usar IDataErrorInfo nem lançar Exception para uso com ExceptionValidationRule. Em vez disso, você pode:
fonte