Простой валидатор RequiredField действительно такой сложный? - PullRequest
0 голосов
/ 21 апреля 2011

Используя INotifyDataErrorInfo, у меня есть методы проверки в моих установщиках моих свойств, это прекрасно работает, если я изменяю значение поля и затем оставляю элемент управления (изменение фокуса), когда сеттер срабатывает, происходит проверка и пользовательский интерфейс уведомляется, но с этот интерфейс, если пользователь просто нажимает кнопку отправить, как я могу сделать что-то похожее на RequiredField, как в asp.net, я не могу найти четкий пример на любом форуме или блоге :(

Я использую Silverlight 4 WCF RIA и инструментарий mvvm-light, вот и все. Я надеюсь, что я не слишком усложняю это, потому что кажется, что все должно быть так просто, но не могу найти решение.

Спасибо за вашу помощь, предложения и советы !!!

1 Ответ

0 голосов
/ 28 апреля 2011

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

        private void Validate()
        {
            ValidationContext validationContext = new ValidationContext(this, null, null);
            ICollection vr = new List();
            Validator.TryValidateObject(this, validationContext, vr, true);
            if (vr.Count >= 1)
            {
                foreach (var item in vr)
                {
                    ManageErrors(((string[])item.MemberNames)[0], new List() { item.ErrorMessage }, true);
                }
            }
        }

Метод управления ошибками - это простая реализация INotifyDataErrorInfo, которую Джесси Либерти сделал здесь

любыми способами теперь, когда мой метод submit вызывается (используя mvvm-light) в моей viewModel, я вызываю это и блокирую все свойства, проверенные с использованием простых dataAnnotations т.е.

        [Required(ErrorMessage = "Is Required", AllowEmptyStrings = false)]
        public string SelectedStatus
        {
            get { return _selectedStatus; }
            set
            {
                _selectedStatus = value;
                RaisePropertyChanged("SelectedStatus");
            }
        }

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

...