我有一个包含数据的对象的模型,它绑定到输入表单。此模型使用IDataErrorInfo
和INotifyPropertyChanged
来验证其内容。我有一种方法可以将"(6*20+sin(20))"
之类的字符串转换为double
值。用于输入此文本的文本框绑定到Mass.TextValue
。但是,当此值发生更改时,它不会调用OnPropertyChanged()
方法,如下所示,因此未验证该值,如何解决此问题?
private DynamicDouble mass = new DynamicDouble("Mass", 1);
public DynamicDouble Mass
{
get { return mass; }
set { mass = value; OnPropertyChanged("Mass"); }
}
DynamicDouble
课程也使用了INotifyPropertyChanged
和IDataErrorInfo
,并调用了内部验证,但它是将string
转换为double
的验证} value,不用于检查该值是否大于0(如果是质量)。我无法在DynamicDouble
类中进行范围检查,因为它不仅仅用于Mass
属性。
答案 0 :(得分:0)
如果没有好的Minimal, Complete, and Verifiable example,就无法确定问题是什么。
但是,根据这里的小信息,似乎好像没有理由调用OnPropertyChanged()
方法,因为Mass
setter方法是从未打电话过如果绑定的唯一内容是Mass.TextValue
,那么唯一会改变的是TextValue
属性,而不是Mass
属性。
如果要进行DynamicDouble
类本身不合适的验证,则应编写ValidationRule
对象并将其附加到使用TextValue
属性的绑定来源。
或者,您的模型对象不应直接公开Mass
对象,而应该实现,例如MassTextValue
并委托DynamicDouble.TextValue
属性,根据需要执行其他验证(当然,也可以根据需要转发DynamicDouble
的验证结果。)
答案 1 :(得分:0)
通过将所有必需的验证逻辑放入ViewModel类并向其添加指向模型本身中的值并验证该输入而不是进行较低验证的属性,解决了该问题。