Tag: idataerrorinfo

如何使用IDataErrorInfo强制validation错误更新ViewModel中的View?

我有一个基于MVVM的窗口,有很多控件,我的Model实现了IDataErrorInfo 。 还有一个SaveCommand按钮,它通过分析Model.Error属性来执行validation。 仅当我更改特定控件的值时,或者当我使用PropertyChanged通知有关该属性的更改时,视图才会显示控件周围的默认红色边框。 即使我没有触摸控件,如何强制View显示所有validation错误? 我的所有validation绑定都包括ValidatesOnDataErrors=True, NotifyOnValidationError=True 。 我知道一个解决方案是有一个包含所有错误的聚合框,但我更愿意在每个控件的基础上显示错误。 我不想为ViewModel中的每个绑定属性触发Model.NotifyPropertyChanged 。 我使用的是WPF 4.0,而不是Silverlight,所以INotifyDataErrorInfo不起作用。

将IDataErrorInfo与嵌套对象一起使用

我正在使用MVVM,我想使用IDataErrorInfo来validation我的View。 我当前的实现包括嵌套对象和不同的ViewModel。 例如,业务实体“客户”包含业务实体“地址”。 我在我的视图中直接访问Address,例如“Customer.Address”。 要validationAddress中的更改,我必须在Address中实现IDataErrorInfo。 我在不同的Views / ViewModels中使用Customer或Address。 在不同的Views / ViewModel中使用会导致不同的validation行为。 因此,在实体本身中实现validation是不够的。 公开我想在ViewModel中直接更改的属性(创建直接设置/获取实体的新属性)似乎使ViewModel方式过于僵化。 而且太大了。 我无法inheritanceBase Classes,因为一些业务实体已经从其他对象派生(事实上我无法改变)。 我目前看到的唯一选择是向业务实体添加ViewModel接口,并将业务实体中的this []调用转发到该ViewModel接口。 是否有关于如何在ViewModel中validation这些嵌套对象的最佳实践? 编辑:另一个原因validation我没有看到Business Objects中的validation作为一个有用的想法是我需要在我的ViewModel中使用不同的Business Objects来validationView和数据条目。

如何为多个BO属性定义IDataErrorInfo错误属性

我开始通过IDataErrorInfo接口在我的WPF项目中实现validation。 我的业务对象包含多个带有validation信息的属性。 如何获取与该对象关联的所有错误消息的列表。 我的想法是,这就是Error属性的用途,但我不能追踪任何使用它来报告多个属性的人。 谢谢! public string this[string property] { get { string msg = null; switch (property) { case “LastName”: if (string.IsNullOrEmpty(LastName)) msg = “Need a last name”; break; case “FirstName”: if (string.IsNullOrEmpty(LastName)) msg = “Need a first name”; break; default: throw new ArgumentException( “Unrecognized property: ” + property); } return msg; } } […]

winforms中的IDataErrorInfo

可以在winforms应用程序中正确使用IDataError信息吗? 在过去,我正在以通常的方式(1)进行绑定,并在特定控件的OnValidating事件中进行validation。 我想将数据validation移动到域模型,以便我可以轻松地交换用户界面,以便所有逻辑都在一个地方。 我正在研究IDataErrorInfo,但我发现的所有内容都与WPF有关,开发中的应用程序严格来说是一个winforms应用程序。 我还注意到在WPF中使用的绑定是在System.Windows.Data中,我一直使用的绑定是在System.Windows.Forms中(当我尝试添加它时,我似乎没有作为一种资源 – 我正在使用3.5)。来自属​​性“ValidatesOnDataErrors”的两者之间有区别吗? (1)通常的方式是: myControl.DataBindings.Add(new Binding(“Text”, this.domainModel, “Property”));

在ViewModel实体上使用DataAnnotation进行Prism IDataErrorInfovalidation

我正在使用Prism MVVM框架在WPF中实现数据validation。 我在ViewModel中使用干净的数据实体,这些实体被绑定到表示层。 我在基础ViewModel类中实现了IDataErrorInfo的通用实现,该类对我的Entity上的DataAnnotation属性运行validation(在本例中为User)。 问题是当绑定到实体时,WPF框架在实体上查找IDataErrorInfo而不是ViewModel,这是我希望这个逻辑存在的地方。 如果我用我的ViewModel中的属性包装我的实体,那么一切正常,但我不希望在ViewModel中妥协使用实体。 有没有办法告诉WPF在ViewModel中查找IDataErrorInfo而不是被绑定的子对象? 谢谢,迈克

如何通过在父类上实现IDataErrorInfo来validation子对象

我正在使用MVVM架构开发WPF应用程序。 我是WPF的业余爱好者所以请耐心等待.. 我有两个模型类。 父类具有另一个(子)类的对象作为其属性。 (我的意思是嵌套对象而不是inheritance对象) 例如,请考虑以下方案。 public class Company { public string CompanyName {get; set;} public Employee EmployeeObj {get; set;} } public class Employee { public string FirstName {get; set;} public string LastName {get; set;} } 我想使用Enterprise Library Validation BlockvalidationEmployee实体的属性。 我可以通过在employee类中实现IDataErroInfo接口来实现,如下所示 public class Employee : IDataErrorInfo { [NotNullValidator(MessageTemplate=”First Name is mandatory”] public string FirstName {get; […]

WPFvalidation(IDataErrorInfo)和选项卡聚焦问题

我有一个TextBox绑定到一个实现IDataErrorInfo的对象的属性。 我设置了TextBox的Validation.ErrorTemplate ,它工作正常。 问题是我在TabControl上有这些,如果我将标签更改为另一个标签然后返回到初始标签( TextBox所在的位置),则validation模板不再显示。 它看起来像是经过validation的(就像值是正确的),但实际上并非如此。 这是IDataErrorInfo对象 – 请注意,“正确”值是长度为2的字符串: public class Presenter : IDataErrorInfo { public Presenter() { this.Property = String.Empty; } public string Property { get; set; } public string Error { get { return null; } } public string this[string columnName] { get { if (columnName == “Property”) { if (this.Property.Length == 2) […]