如何处理在后面的代码中引发WPF Validation.ErrorEvent的需要

迈克·德·克莱克

有此用户控件。它包含验证逻辑。用户控件包含多个输入控件。这些输入控件不是无效的或单独有效的,但是这些值在输入控件中的组合是有效的还是无效的。这意味着永远不会出现验证错误。因为没有绑定会导致验证错误。当注意到输入控件中的任何值已更改并设置其IsValid属性时,ViewModel(将重新进行验证)。

现在,在父视图中,除了其他输入控件之外,该控件也已实现,并且父控件使用以下事件捕获验证错误。

EventManager.RegisterClassHandler(typeof(ParentView), Validation.ErrorEvent, new RoutedEventHandler(ValidationError));

问题在于用户控件没有引发此事件,因为没有控件具有无效的绑定。(由于有效性取决于值的组合,而不是单个控件)。

目前,我正在考虑在Validation.ErrorEvent后面的代码中对此进行改进,但是我怀疑这是行之有效的方法。

我将如何处理?

毫米8

我将如何处理?

也许这不是您想要听到的,但是解决方法是使用实​​现IDataErrorInfo或INotifyDataErrorInfo的视图模型类,然后将视图元素绑定到该对象的源属性。请参阅以下博客文章,以获取有关此内容以及WPF中数据验证的更多信息:https : //blog.magnusmontin.net/2013/08/26/data-validation-in-wpf/

然后,您可以将验证逻辑有效地移至视图模型,并可以在没有任何视图的情况下分别对其进行测试。如果您有多个相互依赖的视图,则可以为每个视图实现一个视图模型类,然后在其中执行最终验证的“父”视图模型类中。在我看来,试图在不同视图之间传递路由事件似乎是一个非常糟糕的主意。出于某种原因,MVVM是基于XAML的应用程序推荐设计模式。如果还没有的话,您应该真正研究一下:https : //msdn.microsoft.com/en-us/library/hh848246.aspx

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

WPF、MVVM IoC:服务定位器模式的替代方案。在后面的查看代码中需要依赖

如何确定Validation.ErrorEvent中是否再没有错误?

为什么我需要在后面的代码中绑定到依赖属性,而在视图模型中不需要绑定?

WPF如何在后面的代码中设置Gridview绑定中的复选框

C# WPF 如何在后面的代码中获取绑定值

如何在后面的代码中设置WPF ApplicationCommands

WPF如何在后面的代码中检索绑定的属性

绑定中的WPF StringFormat在后面的代码中不起作用

(WPF) 如何在后面的代码中找到关于两个 ItemsControl 的祖先?

在后面的代码中创建 ValueChanged 事件处理程序

C# WPF 在后面的代码中绑定到变量和属性

使用 WPF 在后面的代码中创建线条图案

在后面的代码中创建具有动态大小的WPF对象

WPF 我无法在后面的代码中更新组合框值

WPF 在后面的代码中设置 DataTemplate 网格大小(ResourceDictionary)

wpf xaml绑定到在后面的代码中创建的对象

WPF Flow Document:在后面的代码中添加时调整单元格高度

WPF:在后面的代码中访问转换后的画布坐标

如何在后面的代码中使用SqlDataAdapter?

在后面的代码中更改Label的ContentStringFormat属性

回复:资源无法在后面的代码中访问

在后面的代码中从ResourceDictionary检索值

在后面的代码中访问DataTemplate控件

在后面的代码中创建treeview json

在后面的代码中创建jqGrid列模型

在后面的代码中获取li标签的值

在后面的代码中设置AutomationProperties.AutomationId

在后面的代码中设置控件的StaticResource样式

在后面的代码中调用按钮的OnClientClick