我使用數據綁定在C#Windows Forms客戶端的文本框中顯示值。當用戶點擊保存時,我將更改保留到數據庫。但是,活動編輯器中的新值將被忽略(保存以前的值)。如果我從活動編輯器中退出,然後保存,則新值將按預期保持。Databound Windows窗體控件無法識別更改,直到焦點丟失
有沒有辦法強制主動控制接受其價值之前堅持?
我使用數據綁定在C#Windows Forms客戶端的文本框中顯示值。當用戶點擊保存時,我將更改保留到數據庫。但是,活動編輯器中的新值將被忽略(保存以前的值)。如果我從活動編輯器中退出,然後保存,則新值將按預期保持。Databound Windows窗體控件無法識別更改,直到焦點丟失
有沒有辦法強制主動控制接受其價值之前堅持?
如果您可以獲得與輸入對應的Binding
實例(TextBox
),則可以調用WriteValue
method以將該值從控件強制綁定到它所綁定的對象。
此外,你可以叫上BindingManagerBase
class(通常是CurrencyManager
class實例)EndCurrentEdit
method完成編輯,但需要執行對象的ICancelAddNew
或IEditableObject
接口綁定到(而不會要求你的魚爲綁定)。
這是一種黑客攻擊,但在調用保存之前,請嘗試將焦點從活動編輯器(通過將焦點設置爲其他內容,例如保存按鈕)設置在按鈕事件中。
我使用的解決方案是在實際保存數據庫記錄之前,從保存事件(調用)窗體上調用ValidateChildren
。這會強制驗證所有字段,並因此發生綁定,而不會丟失表單上當前正在編輯的控件的焦點。如果保存按鈕位於Windows菜單系統上,而不是自身形成,那麼這真的很方便 - 如果表單上的任何控件中的數據都無效,並且可用於防止保存錯誤數據,則它將返回False。
這也可以避免在將OnPropertyChanged
用作綁定方法而不是OnValidation
時發生的綁定字段的不一致更新。此外,如果將綁定方法設置爲從不獨立,則對每個控件所捕獲的每個驗證事件進行單獨的WriteValue調用。
輝煌,這解決了我的問題,謝謝。 – 2012-03-24 18:11:26