繁体   English   中英

验证绑定到同一对象的不同属性的控件会重置对象值

[英]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网站上发现的一些背景说明:

http://connect.microsoft.com/VisualStudio/feedback/details/351146/binding-writevalue-does-not-update-underlying-data-source

甚至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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM