Вы также можете вызвать выполнение команды
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; }
}
}