Исключение проверки не выполняется, если поле пустое Silverlight - PullRequest
1 голос
/ 11 ноября 2009

Я пытаюсь выполнить простую проверку в текстовом поле, это обязательное поле и не может быть пустым.Первоначально значение будет пустым, поэтому, когда пользователь не вводит никакого значения в поле и напрямую нажимает кнопку «Сохранить», проверка не запускается.Он отлично работает, когда пользователь вводит что-то, а затем удаляет из него значение, затем работает отлично и показывает сообщение об ошибке проверки.Есть ли в любом случае сделать проверку проверки после нажатия кнопки Сохранить.

    [Display(Name = "Sometext", Description = "Some text")]
    [Required(ErrorMessage = "Required Field")]
    public string SomeText
    {
        get
        {
            return _someText; 
        }
        set
        {
            if (_someText== value &&
                value != string.Empty)
            {
                return;
            }

            Validate(value, "someText");//This calls Validator.ValidateProperty method
            _someText= value;
            FirePropertyChanged("someText");
        }
    }

Пожалуйста, предложите!

Заранее спасибо, Сай

Ответы [ 2 ]

1 голос
/ 12 ноября 2009

Вы также можете вызвать выполнение команды

Validator.ValidateObject(this, new ValidationContext(this,null,null),true);

Это должно проверить все свойства вашей модели представления, при условии, что вы вызываете это из вашей модели представления

редактировать: Ответ на комментарий

У вас может быть такое свойство (ниже) в BaseViewModel (каждая модель представления расширяет BaseViewModel), а затем запретить сохранение с правильным сообщением

    protected bool HasValidationErrors
        {
            get
            {
                try { 
                      Validator.ValidateObject(this, new ValidationContext(this, null, null), true); 
                      return false; 
                    }
                catch (ValidationException) { return true; }

            }
        }

В вашей команде вы бы назвали это так

public void SaveCommandExecuted(object parameter)
    {   

        if (HasValidationErrors)
        {
            ShowValidationError();
        }
    }

Еще одна вещь, которую вы можете попробовать, это привязать событие View для ошибок проверки к слушателю в вашей viewmodel

    MyProgram.ViewModels.BaseViewModel baseViewModel = page.Resources["DataSource"] as MyProgram.ViewModels.BaseViewModel;

    page.BindingValidationError += new EventHandler<ValidationErrorEventArgs>(baseModel.OnValidationError);

затем в вашей BaseViewModel

private ObservableCollection<ValidationError> Errors { get; set; }


public void OnValidationError(object sender, ValidationErrorEventArgs e)
        {
            switch (e.Action)
            {
                case ValidationErrorEventAction.Added:
                    Errors.Add(e.Error);
                    break;
                case ValidationErrorEventAction.Removed:
                    Errors.Remove(e.Error);
                    break;
                default:
                    break;
            }
        }

затем измените HasValidationErrors на

protected bool HasValidationErrors
        {
            get
            {
                try { 
                      Validator.ValidateObject(this, new ValidationContext(this, null, null), true); 
                      return this.Errors.Count != 0; 
                    }
                catch (ValidationException) { return true; }

            }
        }
1 голос
/ 11 ноября 2009

Джош Твист поработал над этим. Это прекрасно работает ..

http://www.thejoyofcode.com/Silverlight_Validation_and_MVVM_Part_II.aspx

...