簡體   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