2
respostas

Validação e mascarás utilizando xamarin forms

Nos cursos Xamarin Forms 1 e 2, é utilizado exemplos com TableView, TableRoot, TableSection e EntryCell. No entanto no curso não é abordado a questão de validação de campos (obrigatoriedade de preenchimento) e mascarás, por exemplo de telefone. Sendo assim trago ao fórum essa questão, como faço validação e aplico mascarás nos campos? Obrigado.

2 respostas

Olá, Daniel!

Você pode implementar validação de entrada de dados (como o EntryCell) através de Behaviors.

Behaviors são classes que encapsulam lógica de validação e podem ser "penduradas" em componentes da UI do Xamarin Forms para exibir mensagens de validação:

Você pode ver a implementação de Behaviors e copiar/colar o código ou baixar o código de exemplo do Blog da Xamarin:

https://blog.xamarin.com/behaviors-in-xamarin-forms/

Já para formatação, você pode ver como é implementado um FormatBehavior neste artigo do Visual Studio Magazine:

https://visualstudiomagazine.com/articles/2016/08/01/composable-customizations.aspx

Mas note que formatação de dados é diferente de máscara de entrada (acho que você queria exemplos desta última, não?)

Para isso, veja a implementação de Clóvis Coli para máscara de telefone, email, CPF, CNPJ e CEP. Mas note que criou esse código como componente específico para Xamarin Android:

http://www.cloviscoli.com.br/xamarin-android-edittext-mask-mascara-de-cpf-cnpj-telefone-phone-cep-postalcode/

Boa sorte e bons estudos!

Marcelo eu entendi, porém na para utilizar o behaviors eu teria que alterar o código para fazer uso do Entry, ao invés do EntryCell. Pelo que eu li, o Behavior é utilizado com o elemento Entry e não com o EntrCell, certo? Nesse caso existe uma maneira de utilizar o Behavior com o EntryCell?

Com relação as mascara de entrada, já tinha visto o exemplo do Clovis, mas ela não funciona corretamente, para ficar mais claro, eu precisei modificar a forma como ele utiliza o método para aplicar a mascara. Como estou utilizando o elemento EntryCell, ele não contém a função TextChanged, como no exemplo dele (com EditText). No meu caso eu chamo o método de mascara quando a propriedade telefone por exemplo é alterada. Eu uso o conceito que você ensinou, com o OnPropertyChanged() declarado no próprio modificador de acesso SET.

Funciona, porém esta com um bug, exemplo:

9999-9999

Até o quarto carácter funciona, mas quando eu insiro o hífen, no retorno para a tela, o cursor volta para o início do campo induzindo o usuário a colocar um valor inválido. Exemplo: I9999- (I = Cursor).

Conhece algum macete para fazer com que o Cursor fique sempre no final do campo?

Obrigado.