2012-12-05 126 views
0

我在遇到自定義的ValidationRule時觸發了與Expander.Header綁定關聯的問題。實際上,我似乎能夠觸發這些自定義規則的唯一地方是在DataGrid.RowValidationRules塊中...Expander.Header內部的自定義驗證規則綁定未觸發

擴展器在我的Window XAML文件中被定義爲這樣;

<Expander Style="{StaticResource ValidatedSecondLevelExpanderStyle}"> 
    <Expander.Header> 
     <Binding Path="Name" Mode="OneWay" ValidatesOnDataErrors="True" NotifyOnValidationError="True"> 
      <Binding.ValidationRules> 
       <ValidationRules:BoundObjectIsValid /> 
      </Binding.ValidationRules> 
     </Binding> 
    </Expander.Header> 
</Expander> 

綁定屬性「名稱」顯示正確,但驗證規則「BoundObjectIsValid」未被調用。這是可能的,如果是這樣,我錯過了什麼?

我知道我可以交替實現IDataErrorInfo的綁定的對象,但對象不能理智地驗證本身沒有由該系統的其他部分提供了一些背景。重構是可能的,但我很想讓ValidationRules首先工作!

回答

0

請參閱msdn

綁定引擎在每次將綁定目標屬性值的輸入值傳輸到綁定源屬性時檢查與綁定關聯的每個ValidationRule。

因此,在你的情況下,你沒有將inpurt值轉移到源屬性,因爲你的Expander.header不是你可以用來輸入值的控件。

編輯:但ValidationRule中有一個名爲ValidatesOnTargetUpdated的屬性。不能由用戶改變 - 當設置爲true,當目標屬性更新

+0

我已經得到了他們的DataGrid顯示時驗證行有效性規則將被應用。我認爲有一種方法可以用任何綁定來實現,因爲它是可用的設置...? –

+1

@RJLohan您可以嘗試有效性規則的屬性「ValidatesOnTargetUpdated」設置爲true。我只是發現有這樣一個屬性。希望這有助於。 – Colin

+0

貌似這個屬性有差別,不知道爲什麼,雖然,因爲它不會在其他情況下應用。 –