WPF ValidationRule和Validation.Error不会引发事件
这些代码有什么问题,Validation.Error从未被激发,而我将和NotifyOnValidationError属性设置为True。因此,“Grid_Error(objectsender,validationErrorReventArgs e)”方法从未执行过,但我不知道为什么:( 谢谢你的帮助 编辑: 下面是我的名字:WPF ValidationRule和Validation.Error不会引发事件,wpf,Wpf,这些代码有什么问题,Validation.Error从未被激发,而我将和NotifyOnValidationError属性设置为True。因此,“Grid_Error(objectsender,validationErrorReventArgs e)”方法从未执行过,但我不知道为什么:( 谢谢你的帮助 编辑: 下面是我的名字: class Names : ObservableCollection<Name> { public Names () { Na
class Names : ObservableCollection<Name>
{
public Names ()
{
Name aName = new Name("FirstName " + (this.Count +1).ToString(),
"LastName " + (this.Count + 1).ToString());
this.Add(aName);
}
}
根据您的评论,我认为ValidationRule不会返回错误,因此不会触发错误事件。请尝试使用调试器单步执行验证方法 此外,验证仅在源代码更新时执行,通常在
LostFocus
上的文本框中执行
编辑:MyNames
是一个集合,它没有您尝试绑定到的属性,输出窗口中应该有绑定错误
如果要绑定到第一个元素,则需要将路径更改为类似于
[0].LastName
的路径以进行姓氏绑定。根据您的评论,我认为ValidationRule不会返回错误,因此不会触发错误事件。请尝试使用调试器单步执行验证方法
此外,验证仅在源代码更新时执行,通常在LostFocus
上的文本框中执行
编辑:MyNames
是一个集合,它没有您尝试绑定到的属性,输出窗口中应该有绑定错误
如果要绑定到第一个元素,需要将路径更改为类似于姓氏绑定的
[0].LastName
。Names类是否实现了INotifyPropertyChanged
在文件的代码隐藏文件中,将datacontext设置为this。将
名称
对象作为属性公开,然后查看是否有效。我不习惯绑定到窗口中的静态资源。名称类是否实现INotifyPropertyChanged
在文件的代码隐藏文件中,将datacontext设置为
this
。将名称
对象作为属性公开,然后查看是否有效。我不习惯绑定到窗口中的静态资源。应用程序无法修改此集合的内容。有关如何修改的示例,请参阅示例部分使用此附加属性
WPF数据绑定模型使您能够将ValidationRules与绑定对象相关联。在调用转换器之前,将目标值绑定到绑定源值传输期间会进行验证。以下描述了验证过程:
1.当值从目标属性传输到源属性时,数据绑定引擎首先删除可能已添加到绑定元素的Validation.Errors attached属性中的任何ValidationError。然后检查是否为该绑定定义了任何自定义ValidationRules,在这种情况下,它将调用Validate在每个ValidationRules上使用ate方法,直到其中一个发生错误或全部通过
2.一旦存在未通过的自定义规则,绑定引擎将创建ValidationError对象并将其添加到绑定元素的Validation.Errors集合中。当Validation.Errors不为空时,元素的Validation.HasError attached属性将设置为true。此外,如果绑定的NotifyOnValidationError属性为设置为true,则绑定引擎将引发元素上的Validation.Error attached事件
3.如果所有规则都通过,那么绑定引擎将调用转换器(如果存在)
4.如果转换器通过,绑定引擎将调用源属性的setter
5.如果绑定具有与其关联的ExceptionValidationRule,并且在步骤中引发异常
4,绑定引擎检查是否存在UpdateSourceExceptionFilter。您可以选择使用UpdateSourceExceptionFilter回调来提供用于处理异常的自定义处理程序。如果未在绑定上指定UpdateSourceExceptionFilter,则绑定引擎将创建带有异常的ValidationError并将其添加到验证。绑定元素的错误集合
还请注意,在任一方向(目标到源或源到目标)进行的有效值传输将清除Validation.Errors attached属性
有关此属性在多绑定方案中的行为的信息,请参阅ValidationError。应用程序无法修改此集合的内容。有关如何使用此附加属性的示例,请参阅示例部分 WPF数据绑定模型使您能够将ValidationRules与绑定对象相关联。在调用转换器之前,将目标值绑定到绑定源值传输期间会进行验证。以下描述了验证过程: 1.当值从目标属性传输到源属性时,数据绑定引擎首先删除可能已添加到绑定元素的Validation.Errors attached属性中的任何ValidationError。然后检查是否为该绑定定义了任何自定义ValidationRules,在这种情况下,它将调用Validate在每个ValidationRules上使用ate方法,直到其中一个发生错误或全部通过 2.一旦存在未通过的自定义规则,绑定引擎将创建ValidationError对象并将其添加到绑定元素的Validation.Errors集合中。当Validation.Errors不为空时,元素的Validation.HasError attached属性将设置为true。此外,如果绑定的NotifyOnValidationError属性为设置为true,则绑定引擎将引发元素上的Validation.Error attached事件 3.如果所有规则都通过,那么绑定引擎将调用转换器(如果存在) 4.如果转换器
public class StringValidator : ValidationRule
{
public override ValidationResult Validate(object value,
System.Globalization.CultureInfo cultureinfo)
{
string aString = value.ToString();
if (aString == "")
return new ValidationResult(false, "String cannot be null");
return new ValidationResult(true, null);
}
}
private void Grid_Error(object sender, ValidationErrorEventArgs e)
{
if(e.Action == ValidationErrorEventAction.Added)
MessageBox.Show(e.Error.ErrorContent.ToString());
}
class Names : ObservableCollection<Name>
{
public Names ()
{
Name aName = new Name("FirstName " + (this.Count +1).ToString(),
"LastName " + (this.Count + 1).ToString());
this.Add(aName);
}
}
class Name : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _firstName;
private string _lastName;
public Name(string fName, string lName)
{
_firstName = fName;
_lastName = lName;
}
public string FirstName
{
get
{
return _firstName;
}
set
{
_firstName = value;
PropertyChanged(this, new PropertyChangedEventArgs("FirstName"));
}
}
public string LastName
{
get
{
return _lastName;
}
set
{
_lastName = value;
PropertyChanged(this, new PropertyChangedEventArgs("LastName"));
}
}
}