[英]Validating controls bound to different properties of the same object resets objectvalues
我有一个表单,所有文本框都绑定到实现INotifyPropertyChanged 的同一数据对象的不同属性。 Forms Autovalidate设置为'Disable',因为我想通过调用form.ValidateChildren()显式触发验证。
预期:在调用ValidateChildren之后,所有编辑的值都应该在我的数据对象中。
问题:只有最后一个聚焦控件将其数据写入数据对象,但所有其他控件都会丢失已编辑的值并显示旧值。
问题:如何在控件刷新之前确保所有数据都已经过验证?
使用Autovalidate = EnablePreventFocusChange或EnableAllowFocusChange确实有效,但因为我想立即验证所有这些对我来说不是一个可接受的解决方案。
在互联网上搜索我发现了一个显示同样问题的例子 ,但遗憾的是没有解决方案。
编辑经过进一步调查我试过这个,它的工作原理:
form.BindingContext[dataobject].SuspendBinding();
form.ValidateChildren();
form.BindingContext[dataobject].ResumeBinding();
是暂停绑定的标准方式还是有更好的解决方案来解决这个问题?
我不确定这是否有用,或者它是一个完整的答案,但我有类似的问题,只有一个值已经从整个表格中保存。 以下是我在MS网站上发现的一些背景说明:
甚至SuspendBinding也不适用于我。 因此,根据链接和信息,我通过BindingSource对象连接对象,并将RaiseListChangeEvents属性设置为False
Dim MyBindingSource = New BindingSource With {.DataSource = MyDataSource, .RaiseListChangedEvents = False}
MyControl.DataSource = MyBindingSource
一旦这就到位,你可以调用引用控件上的绑定并手动写入值(假设只有一个绑定)代码看起来类似于:
MyControl.Bindings(0).WriteValue()
如果这有帮助,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.