事件命令中的Validation.error事件

时间:2013-07-01 07:53:59

标签: wpf events mvvm binding eventtocommand

我有一个文本框:

    <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
}

当我在Code Behind中捕获事件Validation.Error时,它可以工作:

enter image description here

但是当我尝试以这种方式运行它时,事件命令不会出现有效功能。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

由于Validation.Error附加事件,因此它通常无法与EventToCommand一起使用。

您将在以下链接中找到答案:

<强> EventToCommand with attached event

答案 1 :(得分:0)

TextBox没有Validation.Error个事件。此外,Validating(您正在使用)没有System.Controls.TextBox个事件。

使用LostFocus验证文本框,或者如果要使用MVVM模式验证,请参阅this question