C# 如何实现通用控制验证?

C# 如何实现通用控制验证?,c#,wpf,mvvm,idataerrorinfo,C#,Wpf,Mvvm,Idataerrorinfo,我最近一直试图养成在我所从事的项目中使用MVVM设计模式的习惯,目的是解耦应用程序中的各个模块,使其适合于单元测试 我已经转到输入验证。我正在我的ViewModel中实现IDataErrorInfo…这对于TextBox来说似乎非常有效 我目前正在尝试解决如何在ListBox控件上实现IDataErrorInfo,该控件绑定到自定义对象的可观察集合。问题是每一行(ListBoxItem)都会直接更新模型,这样就可以绕过ViewModel中的IDataErrorInfo实现。因此,从我的角度来看,

我最近一直试图养成在我所从事的项目中使用MVVM设计模式的习惯,目的是解耦应用程序中的各个模块,使其适合于单元测试

我已经转到输入验证。我正在我的ViewModel中实现IDataErrorInfo…这对于TextBox来说似乎非常有效

我目前正在尝试解决如何在ListBox控件上实现IDataErrorInfo,该控件绑定到自定义对象的可观察集合。问题是每一行(ListBoxItem)都会直接更新模型,这样就可以绕过ViewModel中的IDataErrorInfo实现。因此,从我的角度来看,我可以做两件事之一-

1) 创建一个二级ViewModel(表示ListBoxItems),我使用它来填充Observable集合,并在该集合上实现IDataErrorInfo

2) 在我的模型上实现IDataErrorInfo。然而,由于VIEWModel主要用于中继来自我的模型的引用,所以我可能会考虑将所有IDATAError信息实现移到模型类的一致性…

你会怎么做

还有…关于创建可轻松应用于任何类型控件的可重用验证方法,有什么建议吗

干杯

你会怎么做

当然,第一个选项是为列表项创建二级视图模型。您不应该在模型中实现
IDataErrorInfo
,因为这是特定于UI的功能

我可以轻松应用于任何类型控件的可重用验证方法


你误解了MVVM
IDataErrorInfo
用于视图模型验证,而不是控制验证。

可能是我的沟通技巧失败……哈哈。当我问起可重用验证方法时,我指的是整个设置。因此,我可以在ViewModel中实现IDataErrorInfo,但我也为每个控件设置了一个自定义模板,用于设置Validation.ErrorTemplate。似乎我必须在xaml的顶部添加大量代码以进行验证-当然我可以将其放入资源字典中,但这是最优的吗?我也知道有不同的机制来验证数据验证规则,甚至是ValueConverters…所以我们在这方面寻求一些建议。