Событие Validation.error в команде события

У меня есть текстовое поле:

    <TextBox Height="20" Width="150" Text="{Binding MyProperty,NotifyOnValidationError=True,ValidatesOnDataErrors=True}" >
          <i:Interaction.Triggers>
          <i:EventTrigger EventName="Validation.Error">
                <mvvm:EventToCommand Command="{Binding MyCmd}" PassEventArgsToCommand="True" ></mvvm:EventToCommand>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </TextBox>

Моя ViewModel выглядит так:

  public class MyViewModel : ValidationViewModelBase, INotifyPropertyChanged
{
    private int myVar;

    [Range(0, 10)]
    public int MyProperty
    {
        get { return myVar; }
        set
        {
            myVar = value;
            OnPropertyChanged("MyProperty");
        }
    }



    public MyViewModel()
    {
        MyCmd = new RelayCommand<RoutedEventArgs>(Valid);
    }

    public RelayCommand<RoutedEventArgs> MyCmd { get; set; }

    private void Valid(RoutedEventArgs args)
    {
        //Do something
    }

    #region INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string name)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }

    #endregion INotifyPropertyChanged
}

Когда я ловлю событие Validation.Error в Code Behind, это работает:

Но когда я пытаюсь запустить его таким образом, с помощью Event Event не приходит валидная функция.

Я что-то пропустил?

2 ответа

Решение

Поскольку Validation.Error это прикрепленное событие, то оно не работает с EventToCommand обычно.

Ответ вы найдете по ссылке ниже:

EventToCommand с прикрепленным событием

Здесь нет Validation.Error событие для TextBox, Кроме того, нет Validating событие для System.Controls.TextBox (который вы используете).

использование LostFocus проверить текстовое поле или увидеть этот вопрос, если вы хотите использовать проверку с шаблоном MVVM

Другие вопросы по тегам