有此用户控件。它包含验证逻辑。用户控件包含多个输入控件。这些输入控件不是无效的或单独有效的,但是这些值在输入控件中的组合是有效的还是无效的。这意味着永远不会出现验证错误。因为没有绑定会导致验证错误。当注意到输入控件中的任何值已更改并设置其IsValid属性时,ViewModel(将重新进行验证)。
现在,在父视图中,除了其他输入控件之外,该控件也已实现,并且父控件使用以下事件捕获验证错误。
EventManager.RegisterClassHandler(typeof(ParentView), Validation.ErrorEvent, new RoutedEventHandler(ValidationError));
问题在于用户控件没有引发此事件,因为没有控件具有无效的绑定。(由于有效性取决于值的组合,而不是单个控件)。
目前,我正在考虑在Validation.ErrorEvent
后面的代码中对此进行改进,但是我怀疑这是行之有效的方法。
我将如何处理?
我将如何处理?
也许这不是您想要听到的,但是解决方法是使用实现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] 删除。
我来说两句