2013-12-12 26 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); 
    } 
}