2012-03-12 30 views
1

我想通知WPF中綁定系統中集合項的更改,以便每當集合中的項目發生更改時,通過IDataErrorInfo進行的驗證都會得到重新評估。 我有一個自定義列表類型實現INotifyCollectionChanged(並正常工作)。但不知何故,驗證邏輯從來沒有被調用,因爲(或者至少我假設)這個通知沒有到達正確的地方。這種情況甚至可能嗎?我錯過了什麼?IDataErrorInfo驗證的集合更新的通知

[編輯]

所以基本上 「建築」 是以下內容:

  1. MVVM基類實現IDataErrorInfo的並且可以用在派生MVVM類的lambda,如寄存器DataValidators:
RegisterDataValidator(() => People,() => (People.Count == 0) ? "At least one person must be specified" : null); 

基類的索引器檢查註冊的驗證器並返回它返回的。

  1. 我有一個SmartBindingList<T> where T: INotifyPropertyChange這基本上是一個列表,當項目被添加到它,登記的項目PropertyChangedEvent和類本身發射的CollectionChanged事件反應這些事件:
private void OnSubPropertyChanged (object sender, PropertyChangedEventArgs e) 
    { 
     if (sender is T1) 
     { 
      if (CollectionChanged != null) 
      { 
       NotifyCollectionChangedEventArgs eventArgs = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, sender, sender); 
       CollectionChanged(this, eventArgs); 
      } 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(myPropertyName)); 
      } 
     } 
    } 

所以這一切都很好,但是當代碼在CollectionChanged(this,eventArgs)行上運行時,在驗證方面沒有任何反應。它應該正確連接,因爲當我添加一些東西到集合中,它完美的工作。我錯過了什麼?

+1

顯示您的相關'IDataErrorInfo'代碼 – 2012-03-12 17:11:05

+0

我有同樣的問題 – Mohsen 2012-05-15 09:08:05

回答

1

這是在沒有一些示例代碼的情況下在暗處刺一下,但是嘗試提高已更改屬性的OnPropertyChanged通知。這應該導致驗證重新評估。

+0

這是一個很好的刺無代碼! – Khan 2012-03-12 19:35:00

+0

嗯,我剛花了好幾天的時間試圖讓文本框變成粉紅色(當然有錯誤)。驗證不是WPF最簡單的功能之一。 – Phil 2012-03-12 19:37:07