当视图模型未调用 ErrorsChanged 事件时,绑定引擎是否也会调用 INotifyDataErrorInfo GetErrors()?
Does binding engine also call INotifyDataErrorInfo GetErrors() when ErrorsChanged event is not invoked by viewmodel?
我有一个实现 INotifyDataErrorInfo
接口的视图模型。
当更新 属性 并发生验证错误时,我调用 ErrorsChanged
事件,然后绑定引擎知道它必须在我的视图模型上调用 GetErrors(string propertyName)
方法,从那里我 return 相应 propertyName
的错误 IEnumerable
。
没什么特别的。
但是当我调试时,似乎 GetErrors()
方法在视图模型 属性 更改时被调用(当然是在调用 INotifyPropertyChanged.PropertyChanged 时)。即使我的视图模型没有调用 ErrorsChanged
.
当收到 属性 更改通知时,绑定引擎是否会自行调用 GetErrors()
? (因此不仅在我的视图模型显式调用 ErrorsChanged
时?)
我在文档中找不到它。
Does the binding engine call GetErrors() on its own when a property change is notified? (And thus not only when my viewmodel explicitly invokes ErrorsChanged?)
是的。 TransferValue
方法,当您在 BindingExpression
class 调用中为 UI 绑定源 属性 引发 PropertyChanged
事件时最终会被调用UpdateNotifyDataErrors
如您在 source code.
中所见
我有一个实现 INotifyDataErrorInfo
接口的视图模型。
当更新 属性 并发生验证错误时,我调用 ErrorsChanged
事件,然后绑定引擎知道它必须在我的视图模型上调用 GetErrors(string propertyName)
方法,从那里我 return 相应 propertyName
的错误 IEnumerable
。
没什么特别的。
但是当我调试时,似乎 GetErrors()
方法在视图模型 属性 更改时被调用(当然是在调用 INotifyPropertyChanged.PropertyChanged 时)。即使我的视图模型没有调用 ErrorsChanged
.
当收到 属性 更改通知时,绑定引擎是否会自行调用 GetErrors()
? (因此不仅在我的视图模型显式调用 ErrorsChanged
时?)
我在文档中找不到它。
Does the binding engine call GetErrors() on its own when a property change is notified? (And thus not only when my viewmodel explicitly invokes ErrorsChanged?)
是的。 TransferValue
方法,当您在 BindingExpression
class 调用中为 UI 绑定源 属性 引发 PropertyChanged
事件时最终会被调用UpdateNotifyDataErrors
如您在 source code.