我有一个文本框:
<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时,它可以工作:
但是当我尝试以这种方式运行它时,事件命令不会出现有效功能。
我错过了什么吗?
答案 0 :(得分:2)
由于Validation.Error
是附加事件,因此它通常无法与EventToCommand
一起使用。
您将在以下链接中找到答案:
答案 1 :(得分:0)
TextBox
没有Validation.Error
个事件。此外,Validating
(您正在使用)没有System.Controls.TextBox
个事件。
使用LostFocus
验证文本框,或者如果要使用MVVM模式验证,请参阅this question