【发布时间】:2011-02-08 16:25:51
【问题描述】:
情况:在 WPF 中,我们多次使用 INotifyPropertyChanged 和 IDataErrorInfo 来对我们的数据对象启用绑定和验证。我有很多看起来像这样的属性:
public SomeObject SomeData
{
get { return _SomeData; }
set { _SomeData = value; OnPropertyChanged("SomeData"); }
}
当然,我的班级中有一个适当的覆盖 IDataErrorInfo.this[] 来进行验证。
问题:在绑定情况下,验证代码何时执行?什么时候设置属性?什么时候执行setter代码?如果验证失败怎么办?
例如:
- 用户输入新数据。
- 绑定将数据写入属性。
- 属性
set方法被执行。 - 绑定检查
this[]以进行验证。 - 如果数据无效,绑定会将属性设置回旧值。
- 再次执行属性
set方法。
如果您在 set 方法中添加“钩子”,这一点很重要,例如:
public string PathToFile
{
get { return _PathToFile; }
set
{
if (_PathToFile != value && // prevent unnecessary actions
OnPathToFileChanging(value)) // allow subclasses to do something or stop the setter
{
_PathToFile = value;
OnPathToFileChanged(); // allow subclasses to do something afterwards
OnPropertyChanged("PathToFile");
}
}
}
【问题讨论】:
标签: c# wpf validation data-binding properties