单击按钮时验证 ViewModel
我有一个实现 IDataErrorInfo 和主从视图的 ViewModel。当用户点击详细视图中的“保存”按钮时(而不是更早),如何触发当前 ViewModel 项的验证?
I have a ViewModel that implements IDataErrorInfo and a master-detail-view. How can I trigger the vaildation of the current ViewModel item when the user hits the save button in the detail view and not earlier?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先在您的虚拟机上添加一个标志,将其初始设置为 false。
在按钮命令代码中(假设您已将按钮绑定到虚拟机上的命令),在运行验证代码之前打开该标志。
在 IDataErrorInfo 属性的“get”代码中,如果该标志设置为 true,则仅返回验证错误,否则返回空字符串。
在将标志切换回 false 之前,引发一个以空字符串作为属性名称的 PropertyChangedEvent,这将强制绑定系统重新评估当前上下文中的所有绑定,并检查 IDataErrorInfo 是否有错误。
Start by including a flag on your VM, set it initally to false.
In your Button command code (assuming you have bound your button to a command on your VM), turn on the flag before running your validation code.
In the "get" code in the IDataErrorInfo properties, only return a validation error if the flag is set to true, otherwise return an empty string.
Before switching the flag back to false raise a PropertyChangedEvent with an empty string as the property name, this will force the binding system to reevaluate all bindings in the current context, as well as check for errors against IDataErrorInfo.
benPearce给出了很好的答案。
正如他指出的那样。
this[columnName]
返回 null(即使数据无效),直到您OnPropertyChanged(null)
让 WPF 重新-评估绑定(并询问索引器)该示例使用字典来代替标志来实现相同的结果。
在视图中
在ViewModel中
benPearce has given a great answer.
As he pointed out.
this[columnName]
return null (even if data is invalid) until you click "Save"OnPropertyChanged(null)
to let WPF re-evaluete the bindings (and interrogate the indexer)Instead of using a flag this sample uses a Dictionary to achieve the same result.
In the View
In the ViewModel