2010-09-08 52 views
1

我想验证页面加载事件中的所有TextBox控件。我知道有一种方法可以做到这一点。这是我用过的。在WPF中强制绑定验证

BindingExpression bx = myTextBox.GetBindingExpression(TextBox.TextProperty); 

if(bx != null) 
    bx.UpdateSource(); 

我有一个自定义的ValidationRule,检查是否需要一个字段为我的一些文本框。现在,如果我在页面加载中运行此代码,它不起作用。但是,如果我将这些代码放入按钮单击事件中,那么它就起作用了!

如何验证控制负载上的控件?

+0

什么不起作用?页面加载时是否为bx null? – Timores 2010-09-08 19:46:32

+0

bx在控制负载和按钮单击事件中都有一个值。但是在控制负载上,如果没有调度程序的帮助,验证不会更新。不知道为什么,因为我在UI线程上执行。 – Matt 2010-09-08 20:30:51

回答

1

尝试把代码里面Dispatcher.Begininvoke

Dispatcher.BeginInvoke(new Action(() => { 
      BindingExpression bx = myTextBox.GetBindingExpression(TextBox.TextProperty); 

      if (bx != null) 
      bx.UpdateSource(); 
    })); 
+0

这有效,但你有什么解释为什么?我不是在一个单独的线程。正在执行的代码正在UI线程上运行。 – Matt 2010-09-08 20:28:47

+0

我不完全确定。我只知道有些东西在Loaded事件触发时不可用...显然这是其中的一种情况。 – mdm20 2010-09-08 21:48:12