2013-12-12 78 views
0

我有一個帶有TextChanged事件的TextBox。 該TextBox位於StackPanel中。 如果我做一個StackPanel.Children.Clear(),我的TextBox事件不會被執行。如何清除綁定對象而不執行事件

適合我!

現在,我需要將我的TextBox綁定到數據庫請求的結果。 如果我讓我的StackPanel.Children.Clear(),TextChanged事件執行!

當TextBox爲Clear()時,誰知道我會避免執行該操作?

解決的辦法是取消綁定我的TextBox WITHOUT事件執行...

+0

現象本身是真的很有趣!這是爲什麼?如果綁定引用離開文本框活着,爲什麼事件不足以做到這一點? – dovid

+0

我用ClearAllBindings測試了你的解決方案,但問題是一樣的。 當我ClearAllBindings()時,TextBox的事件TextChanged被執行。 請注意,我使用DataContext綁定我的對象與我的數據庫。 – user3094598

+0

這是沒有意義的,因爲沒有人改變文本! 您已準備好顯示您的XAML +代碼? – dovid

回答

0

明確之前綁定:

BindingOperations.ClearBinding(txtName, TextBox.TextProperty) 

或更好

foreach (DependencyObject item in sp.Children) 
    BindingOperations.ClearAllBindings(item); 

sp.Children.Clear(); 

編輯 - 對於嵌套元素:

ClearBindings(sp); 
sp.Children.Clear(); 

ClearBindings功能:

void ClearBindings(Panel panel) 
{ 
    foreach (DependencyObject item in panel.Children) 
    { 
     BindingOperations.ClearAllBindings(item); 
     if (typeof(Panel).IsAssignableFrom(item.GetType())) 
      ClearBindings(item as Panel); 
    } 
} 
相關問題