2012-10-15 14 views
3

我有一個窗體,所有文本框綁定到不同的屬性相同的數據對象實現INotifyPropertyChanged。表格自動驗證設置爲'禁用',因爲我想通過調用form.ValidateChildren()明確觸發驗證。驗證綁定到同一對象的不同屬性的控件重置對象值

預計: 調用ValidateChildren之後,所有編輯的值應該在我的數據對象中。

問題: 只有最後的集中控制它的數據寫入到數據對象,但所有其他控件失去編輯的值並顯示舊值來代替。

問題: 如何確保在控件自行刷新之前驗證所有數據?

使用Autovalidate = EnablePreventFocusChange或EnableAllowFocusChange可以正常工作,但由於我想立刻驗證它,所以對我來說這不是一個可接受的解決方案。

在互聯網上搜索soutions我發現一個example顯示相同的問題,但不幸的是沒有解決方案。

編輯 經過進一步調查我想這和它的作品:

form.BindingContext[dataobject].SuspendBinding(); 
form.ValidateChildren(); 
form.BindingContext[dataobject].ResumeBinding(); 

在暫停綁定的標準方式還是有什麼更好的辦法來解決這一問題?

回答

0

我不確定這是否有幫助,或者它會是一個完整的答案,但我有類似的問題,只有一個值已被保存在整個表單中。下面是一些背景解釋,我在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() 

讓我知道這是否有幫助。

+0

你好pkoszka,謝謝你的回答。一年前我遇到了問題,最後我重新設計了沒有數據綁定的表單,所以我不能說你的建議對我有用,對不起。 – Matmok

相關問題