2012-02-01 18 views
0

所以我在代碼後面的TextBox的Text屬性上調用UpdateSource()方法。 ErrorTemplate應該出現,但直到我將鼠標移到TextBox上時纔會出現。顯式綁定UpdateSource()不起作用,直到鼠標懸停在文本框上

或者它可以但不會重新繪製?任何想法如何解決這個即時更新GUI?

編輯:

它是PropertyChanged。問題不在於更新源代碼。問題是,當源更新時,它會導致驗證,並且ErrorTemplate應該出現,但直到我將鼠標移動到驗證的TextBox上時纔會出現。

編輯:

Appearently它更新,當我將我的鼠標移到其他一些GUI元素,以及(如單選按鈕),不具有任何與驗證。這肯定是重新繪製或綁定驗證錯誤檢查觸發器的問題。我如何在後面的代碼中觸發它?

+0

在鼠標懸停之前,文本框是否變爲紅色?這是ErrorTemplate的默認行爲。您可能可以通過ControlTemplate獲得所需的行爲。 – Paparazzi 2012-02-01 14:50:41

+0

不,它不。 ErrorTemplate只在鼠標懸停時觸發。那就是問題所在。然而,在所有其他情況下它都能正常工作 – Martynas 2012-02-01 15:06:01

+0

源代碼是否實現iNotifyPropertyChanged?跟蹤Get並查看它何時被調用。您可能需要手動拋出錯誤。 – Paparazzi 2012-02-01 15:25:10

回答

-2

您可能會觸發Validation_Error。

<TextBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" x:Name="fieldValue" BorderBrush="SteelBlue" BorderThickness="2" TextWrapping="Wrap" 
      Text="{Binding Path=DF.FieldValue, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True, UpdateSourceTrigger=Explicit}" 
      Validation.Error="Validataion_Error" 
      LostFocus="fieldValue_LostFocus" KeyUp="fieldValue_KeyUp"/> 


    private void Validataion_Error(object sender, ValidationErrorEventArgs e) 
    { 
     if (e.Action == ValidationErrorEventAction.Added) 
     { 
      MessageBox.Show(e.Error.ErrorContent.ToString(), "Fatal Update Error"); 
     } 
    } 

可能是因爲該事件在文本框上只在TextBox有焦點時觸發。您可能需要拋出一個自定義事件並在頁面/窗口中處理它。

+0

現在這很奇怪。當我把它扔出消息框時,它會更新GUI。就像我懸停在任何WPF元素上一樣。我想我需要在這裏使用一些醜陋的黑客。任何想法會起什麼作用? – Martynas 2012-02-01 16:54:52

+0

而不是MessageBox嘗試設置焦點在TextBox上。 – Paparazzi 2012-02-01 17:02:31

+0

在我的具體情況下,我無法集中它(焦點導致副作用)。任何其他想法? – Martynas 2012-02-01 17:09:15

0

'TextBox'控件的文本屬性綁定非常具體。 UpdateSourceTrigger默認設置爲「LostFocus」。這是爲了提高性能。嘗試將其更改爲PropertyChanged。

+0

對不起,沒有足夠清楚解釋。請檢查更新後的問題。 – Martynas 2012-02-01 14:58:20