Как реализовать декларативную проверку формы Xamarin

1656553338 kak realizovat deklarativnuyu proverku formy

автор Амир Джан

1*VauUkE1T8Xv2arCzSNUy5A

Если у вас есть существующий Xamarin.Forms codebase и хотите добавить проверку, не влияя на код или модель просмотра, тогда это для вас. ?

Что заставило меня написать статью?

Наша команда разработала и разработала мобильное приложение Xamarin с несколькими формами с нулевыми проверками, поскольку у нас было меньше времени и мы устраивались только с проверками внутренней части.

Прошло время, наша потребность добавить проверку интерфейса росла вместе с приложением. Поэтому мы решили добавить проверку, не влияя на наш код или модель просмотра. Не было статей, которые помогли бы нам с этой стратегией, поэтому я решил написать одну.

Предпосылки

Я предполагаю, что вам комфортно Xamarin Поведение. Если нет, прочтите приведенную ниже документацию — она очень проста и понятна.

Xamarin.Forms Behaviors — Xamarin
Поведение позволяет добавлять функциональные возможности в элементы управления пользовательским интерфейсом без необходимости их подкласса. Поведение написано…docs.microsoft.com

Чем мы закончим

Результатом станут хорошо читаемые и декларативные проверки на xaml, сохраняя код сзади и модель просмотра от проверки!

На что следует обратить внимание

Каждый раз, когда код слишком длинный для преобразования в одном пояснении, я разбиваю его на несколько разделов и буду использовать три точки () вместо кода из предыдущих или будущих разделов.

Итак, каков план?

1*eO3Oa1jcdCXtPz-Y-bC1Vw

Мы можем достаточно хорошо спланировать свой путь, если сможем подумать об основных вещах, происходящих во время проверки:

1*h8ib08-kXOGLsaZLy_E6Tw

Вышеприведенная блок-схема является очень абстрактным представлением всего нашего дизайна. Чтобы пролить больше света на фактический код, посмотрите следующее изображение:

1*wIHOFE3kSzR9ysT_PeSNbg

Хватит, хватит — давайте кодировать!

Нижеприведенный интерфейс помогает поддерживать согласованность между различными валидаторами, которые мы определяем.

Теперь давайте напишем несколько реализаций для нескольких распространенных валидаторов.

Некоторые валидаторы могут потребовать нескольких дополнительных параметров. Например, FormatValidator требуется параметр формата, и эти параметры можно добавить как поля в класс.

Существует несколько способов отображения ошибки. Возможно, вы предпочитаете отображать его прямо под элементом управления, или вы предпочитаете показать его как итог в верхней части формы. Чтобы удовлетворить эти разные стили отображения ошибок, мы определяем интерфейс, чтобы поддерживать согласованность.

Для простоты я реализовал очень простой стиль ошибок, который просто добавляет и удаляет метку под проверяемым контролем.

Теперь настало время для Поведение Xamarin часть, которая склеивает весь вышеприведенный код.

_style: Это поле инициализируется посредством нашей специальной реализации BasicErrorStyle. Это поможет нам показать и удалить ошибку, когда это необходимо.

_view: Это элемент управления, на который возложена эта проверка.

Название собственности: Это свойство элемента управления, которое должно быть проверено на соответствие правилам проверки, скажем, свойство Text элемента управления Entry или свойство SelectedItem элемента управления выбора.

Валидаторы: Это список правил проверки, по которым будет проверяться свойство управления.

The Подтвердить() Метод проходит через все правила проверки и выполняет метод Check для значения свойства элемента управления. Если все правила проверки соответствуют, то Удалить ошибку способ вызывается на _style. Иначе ShowError способ вызывается на _style.

Оставшаяся часть кода просто присоединяет и отсоединяет файл OnPropertyChanged, OnUnFocussed метод к событию PropertyChanged и UnFocussed элемента управления всякий раз, когда это поведение добавляется в xaml.

Когда эти события запускаются, они вызывают Подтвердить() метод, который мы определили ранее, который в свою очередь добавляет или удаляет ошибку при необходимости.

Как это использовать

1*факсCWiiC5i0D70YwDtwLxA

Да, ожидание наконец-то закончилось! Теперь вы можете добавить эти проверки в свой xaml, импортируя необходимые пространства имен xaml.

Если вы сейчас запустите приложение, вы должны почувствовать нечто подобное:

1*5yLoqd4n7YXnarwHpkA4Ng

Проверка всей формы

Теперь следующая задача: как мы знаем, действительна ли вся форма? То есть, как мы узнаем, что все элементы управления в форме имеют действительные данные?

Чтобы достичь этого, мы создаем другое поведение под названием ValidationGroupBehavior, в котором мы группируем элементы управления, которые должны быть проверены вместе, чтобы проверить всю форму.

_validationBehaviors: это – это список поведения проверки из различных элементов управления, подлежащих проверке.

IsValidProperty: это свойство, которое можно связывать, к которому вы можете получить доступ в xaml, чтобы проверить, действительна ли форма или нет.

Выкладываем два способа, а именно Добавить() и Удалить(), чтобы помочь элементам управления добавить или удалить себя из группы проверки.

Мы также раскрываем метод, Обновить(), чтобы помочь элементам управления обновлять действительность формы каждый раз, когда их данные изменяются. Этот метод, в свою очередь, выполняет все проверки в _validationBehaviors и устанавливает значение IsValid имущество соответственно.

Рефакторинг нашего ValidationBehavior

Давайте сделаем небольшой рефакторинг нашего класса ValidationBehavior, чтобы согласовать группировку элементов управления для проверки:

Мы добавили свойство под названием группа чтобы сохранить группу проверки, к которой принадлежит элемент управления. The Group.Add() и Group.Remove() Методы вызываются, когда это поведение присоединено или отделено, соответственно, от элемента управления. Это добавляет или удаляет элемент управления из определенной группы проверки. Каждый раз, когда элемент управления теряет фокус, он обновляет реальность группы, вызывая Group.Update() метод.

ValidationGroupBehavior в действии

Обновите файл xaml, как показано ниже, чтобы увидеть отличные группы проверки:

Приведенный выше код добавляет ValidationGroupBehavior к родительскому элементу всех элементов управления, а затем добавляет свою ссылку на группа собственность Валидатор в контроле. Затем можно использовать IsValid свойство группы проверки, чтобы включить или отключить кнопку отправки. Прекрасные вещи, правда?

Если сейчас запустить приложение, вы увидите нечто подобное:

1*SBHPeDHSnbAUrewSoqn6pw

А как насчет асинхронных валидаторов?

1*1YQKAMnGRv5rfERe9TNxyA

Я слышу, как у вас в голове звучит вопрос. Одним из преимуществ нашего дизайна является то, что его можно легко расширить без труда. Этого можно добиться, просто объявив другой интерфейс, как показано ниже:

Теперь вы можете создать реализацию для асинхронного валидатора, скажем AsyncUserExists, возвращающая задачу, решаемую к логическому значению. Добавьте новое свойство к ValidationBehavior звонил AsyncValidators и добавьте асинхронные валидаторы к этому свойству. Немного асинхронности и ожидание добавления в процесс проверки решит нашу проблему.

Мы наконец-то закончили?

Мы охватили немало информации очень просто. Но есть несколько приятных функций, которые вы можете попробовать сами:

  • Debounce для асинхронных валидаторов
  • Проверьте, загрязнен ли элемент управления (пользователь что-то ввел) или нет, прежде чем показать ошибку

Растерянный?

1*f7rU8GMQ234_69Lx5rWOyw

Если вы растерялись или у вас есть серые зоны, не стесняйтесь обращаться ко мне в комментариях. Вы также можете обратиться к моей демонстрационной программе на GitHub, на которую я ссылаюсь ниже.

ameerthehacker/XamarinFormValidationDemo
XamarinFormValidationDemo – это демонстрационное приложение для моего среднего блога о проверках формы xamaringithub.com

TL; DR

Если вы ленивы, как я, или не хотите много писать, чтобы получить вышеупомянутую функциональность, то можете подождать, пока я разработаю пакет NuGet для проверки формы xamarin, используя приведенную выше стратегию. Вы можете присоединиться к нему, и я предоставил ссылку на него ниже.

ameerthehacker/XamarinFormValidation
XamarinFormValidation — Делькаративная, гибкая и хорошо настраиваемая проверка в Xamarin без пота :hearts:github.com

Если вы нашли эту статью полезной, дайте мне несколько аплодисментов?

Добавить комментарий

Ваш адрес email не будет опубликован.