2012-03-12 5 views
1

Я хотел бы уведомить систему привязки в WPF об изменении элемента коллекции, чтобы проверка с помощью IDataErrorInfo была переоценена всякий раз, когда элемент внутри коллекции изменяется. У меня есть собственный тип списка, который реализует INotifyCollectionChanged (и работает правильно). Но почему-то логика проверки никогда не вызывается, потому что (или, по крайней мере, я предполагаю), что это уведомление не достигает нужного места. Возможно ли, что этот сценарий возможен? Что я пропустил?Уведомление об обновлении коллекции для проверки IDataErrorInfo

[Редактировать]

Поэтому в основном "архитектура" заключается в следующем:

  1. MVVM базовый класс реализует IDataErrorInfo и вы можете зарегистрировать DataValidators с лямбды в производных классах MVVM, таких как:
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 –

+0

У меня та же проблема – Mohsen

ответ

1

Это немного удар в темноте без какого-либо примера кода, но попробуйте повысить уведомление OnPropertyChanged для измененных свойств. Это должно привести к переоценке проверки.

+0

Это довольно хороший удар без кода! – Khan

+0

Ну, я просто провел несколько дней, пытаясь получить текстовые поля, чтобы они стали розовыми (когда есть ошибка, конечно). Проверка не является одной из простейших функций WPF для работы. – Phil