Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 针对IDataErrorInfo和新的INotifyDataErrorInfo进行异常验证_C#_Wpf_Validation_Idataerrorinfo_Inotifydataerrorinfo - Fatal编程技术网

C# 针对IDataErrorInfo和新的INotifyDataErrorInfo进行异常验证

C# 针对IDataErrorInfo和新的INotifyDataErrorInfo进行异常验证,c#,wpf,validation,idataerrorinfo,inotifydataerrorinfo,C#,Wpf,Validation,Idataerrorinfo,Inotifydataerrorinfo,我正在尝试不同的验证方法,但新的INotifyDataErrorInfo接口有问题 例如,在写入仅接受10个字符的绑定文本框时。我写了11个字符,然后签了出来。验证开始并将文本框标记为红色等。现在,我不想将此无效值写入此绑定的源,但如果我不这样做,我会立即将文本框中的值重置为最后一个有效值。这就好像绑定在其绑定上执行UpdateTarget操作,即使存在错误 通过使用ValidatesOnExceptions并在setter中抛出异常,我得到了我想要的行为。如果在setter中抛出异常,则绑定不

我正在尝试不同的验证方法,但新的INotifyDataErrorInfo接口有问题

例如,在写入仅接受10个字符的绑定文本框时。我写了11个字符,然后签了出来。验证开始并将文本框标记为红色等。现在,我不想将此无效值写入此绑定的源,但如果我不这样做,我会立即将文本框中的值重置为最后一个有效值。这就好像绑定在其绑定上执行UpdateTarget操作,即使存在错误

通过使用ValidatesOnExceptions并在setter中抛出异常,我得到了我想要的行为。如果在setter中抛出异常,则绑定不会从源更新其值。这会在文本框中留下无效值,以便我可以使用它使其有效。我认为这比必须在底层对象中存储无效值要好得多

问题是为什么IDataErrorInfo和新的INotifyDataErrorInfo的行为方式是,即使存在错误,它也会从源代码更新目标?我能让它表现得更像ValidatesOnExceptions吗


由于异步验证等其他功能,我需要INotifyDataErrorInfo…

如果需要在将值提交到源之前验证该值,则需要创建自定义验证规则并将ValidationStep设置为RawProposedValue或ConvertedProposedValue

有关更多信息,请参阅和上的文档