2016-03-16 73 views
0

上下文的位如何在窗口失去焦點時更新文本框的值?

<TextBox Text="{Binding Value, UpdateSourceTrigger=LostFocus}"/> 

TextBox控件具有稱爲UpdateSourceTrigger裝訂選項,這是默認設置爲引發LostFocus。但是,當TextBox在其自己的窗口內失去焦點時,這隻能工作。即使整個所有者窗口失去焦點,我也需要更新綁定。

可能的解決方案?

現在,Window.Deactivated事件似乎做得很好。

<Window x:Class="MyWindow" Deactivated="OnDeactivated"> 

在這個問題

話雖這麼說,怎麼能在TextBox監聽它的父窗口的Window.Deactivated事件,考慮到文本框都生活在用戶控件對象的幾層。

Window --> UserControl --> UserControl --> TextBox 

我怎樣才能讓事件氣泡從窗口到TextBox? (ie:讓TextBox監聽Window.Deactivated事件

或者也許有更好的解決方案呢?

+0

您的目標是?爲什麼當窗口失去焦點時需要更新文本框? – unkreativ

+0

我們需要填寫的值與其他客戶端同步。如果用戶在表單中的其他地方點擊,則沒問題。但是如果他點擊另一個窗口或應用程序,則該值不會同步。而且,UpdateSourceTrigger = PropertyChanged不是一個可行的解決方案,因爲每次用戶輸入一個新的字母時它都會觸發同步。 – asmo

+0

如果我沒有錯,我應該默認情況下發生。 – Gopichandar

回答

0

WPF 4.5現在支持延遲綁定。與PropertyChanged相結合,這意味着一旦用戶輸入完成後,該值就會更新,但延遲X毫秒之後。漂亮的拉德,對嗎?

Text="{Binding Value, UpdateSourceTrigger=PropertyChanged, Delay=2000}"/> 
1

爲什麼不在窗口類中添加窗口停用事件的處理程序,然後(在您的處理程序中)更新您的用戶控件(給它一個Update方法或其他東西)?

0

您可以使用自定義行爲類來實現這一功能

public class CustomBehavior : Behavior<UIElement> 
{ 
//use the override the OnAttached() 
} 
相關問題