2010-10-05 2 views
4

в моем MVVM приложении У меня есть список элементов, реализующих IDataErrorInfo и INotifyPropertyChangedForce WPF компонента для проверки, когда событие возникает

вида проверки объектов VM, когда PropertyChanged события возникает.

проблема заключается в том, что результат проверки зависит не только от внутреннего состояния объекта, но и от «среды», которая является другими объектами, принадлежащими к списку.

Поэтому мне нужно, чтобы валидация вызывалась по всем элементам списка каждый раз, когда объект удалялся или обновлялся.

Как я могу заставить validaiton таким образом?

ответ

0

Эй У меня есть ответ на ваш вопрос. Список по умолчанию, называемый ObservableCollection, поднимет событие только в том случае, если элементы будут добавлены или удалены. Если элемент изменения свойства не будет поднят.

Вы можете подклассировать ObservableCollection и добавить событие для каждого элемента. В этой ссылке есть очень хорошая реализация, данная человеком из StackOverFlow. ObservableCollection that also monitors changes on the elements in collection
Слишком хорошо, я попробовал и использовал. Он работает превосходно. Надеюсь, это поможет вам и направит вас в правильном направлении!

1

в VM, который держит список, каждый раз, когда список изменений, итерацию по списку и сказать каждому объекту поднять уведомление об изменении свойства либо на свойства, которые вы знаете, может быть недействительным или просто каждое свойство, установив имя свойства в пустую строку.

Похоже, что ваша проверка может быть проведена по нескольким объектам, и в этом случае вам необходимо выполнить проверку с указанной выше виртуальной машины и установить сообщения об ошибках в соответствующих объектах в коллекции, а затем поднять событие изменения свойства на этих объектах ,

Я сделал это ранее, имея открытый метод SetErrorMessage(string string) для объектов, реализующих IDataErrorInfo, и общедоступный метод OnPropertyChanged(string), чтобы я мог устанавливать ошибки и повышать контекстное свойство, измененное событиями вне объекта.

Ошибки будут храниться в словаре, а свойство this[string] будет искать словарь для ошибок, а также запускать собственную проверку.

Смежные вопросы