我有一个表单,所有文本框都绑定到实现 INotifyPropertyChanged的同一数据对象的不同属性。表单自动验证设置为“禁用”,因为我想通过调用 form.ValidateChildren() 显式触发验证。
预期: 调用 ValidateChildren 后,所有编辑的值都应该在我的数据对象中。
问题: 只有最后一个获得焦点的控件将其数据写入数据对象,但所有其他控件都会丢失已编辑的值并显示旧值。
问题: 如何确保在控件刷新之前验证所有数据?
使用 Autovalidate = EnablePreventFocusChange 或 EnableAllowFocusChange 确实有效,但因为我想一次验证所有内容,这对我来说不是一个可接受的解决方案。
在互联网上搜索解决方案我发现了一个显示相同问题的示例,但不幸的是没有解决方案。
编辑 经过进一步调查,我尝试了这个并且它有效:
form.BindingContext[dataobject].SuspendBinding();
form.ValidateChildren();
form.BindingContext[dataobject].ResumeBinding();
暂停绑定是标准方式还是有更好的解决方案来解决这个问题?