2010-09-08 53 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