2010-02-19 33 views
2

我已經有一個ItemsControl充滿了幾十個項目;每個項目都是一個綁定文本框和幾個按鈕。因爲我希望用戶能夠從文本框中選擇文本框,所以按鈕的Focusable設置爲False。這工作得很好。唯一的問題是,由於文本框沒有失去焦點,它們的綁定不會更新源代碼,所以按鈕後面的代碼不能使用正確的值。如果用戶點擊某些不可聚焦的東西,我該如何讓控件失去焦點?

我可以想出解決這個問題的方法,例如使按鈕的Click處理程序在邏輯樹中導航到其關聯的文本框,並使綁定更新源顯式。但在我看來,還有比這更好的方法,如果我對焦點模型有更好的理解,這對我來說可能是顯而易見的。在那兒?

回答

1

由於性能問題,您可能會發現article written by Josh Smith有用。上下文與您的問題非常相似。喬希通過手動觸發綁定更新解決它:

TextBox focusedTextBox = Keyboard.FocusedElement as TextBox; 
    if (focusedTextBox == null) 
     return; 

    BindingExpression textBindingExpr = 
     focusedTextBox.GetBindingExpression(TextBox.TextProperty); 
    if (textBindingExpr == null) 
     return; 

    textBindingExpr.UpdateSource(); 
1

如果性能允許您將這些文本框元素的UpdateSourceTrigger更改爲PropertyChanged而不是LostFocus

+0

可能行不通:它是RichTextBox中的一個子類,它支持對文檔屬性屬性更改通知,以便ValueConverter可以解析XAML並將其轉換爲HTML 。每次擊鍵都無法完成。 –

+0

如果您擔心此操作的成本,請通過觸發定時器的某些內容來路由屬性,並且只有在定時器評估(10ms?100ms?)後,纔會實際執行轉換。 –