2009-06-29 27 views
5

我使用數據綁定在C#Windows Forms客戶端的文本框中顯示值。當用戶點擊保存時,我將更改保留到數據庫。但是,活動編輯器中的新值將被忽略(保存以前的值)。如果我從活動編輯器中退出,然後保存,則新值將按預期保持。Databound Windows窗體控件無法識別更改,直到焦點丟失

有沒有辦法強制主動控制接受其價值之前堅持?

回答

5

如果您可以獲得與輸入對應的Binding實例(TextBox),則可以調用WriteValue method以將該值從控件強制綁定到它所綁定的對象。

此外,你可以叫上BindingManagerBase class(通常是CurrencyManager class實例)EndCurrentEdit method完成編輯,但需要執行對象的ICancelAddNewIEditableObject接口綁定到(而不會要求你的魚爲綁定)。

+0

輝煌,這解決了我的問題,謝謝。 – 2012-03-24 18:11:26

2

這是一種黑客攻擊,但在調用保存之前,請嘗試將焦點從活動編輯器(通過將焦點設置爲其他內容,例如保存按鈕)設置在按鈕事件中。

3

我使用的解決方案是在實際保存數據庫記錄之前,從保存事件(調用)窗體上調用ValidateChildren。這會強制驗證所有字段,並因此發生綁定,而不會丟失表單上當前正在編輯的控件的焦點。如果保存按鈕位於Windows菜單系統上,而不是自身形成,那麼這真的很方便 - 如果表單上的任何控件中的數據都無效,並且可用於防止保存錯誤數據,則它將返回False。

這也可以避免在將OnPropertyChanged用作綁定方法而不是OnValidation時發生的綁定字段的不一致更新。此外,如果將綁定方法設置爲從不獨立,則對每個控件所捕獲的每個驗證事件進行單獨的WriteValue調用。