Принудительная проверка компонента WPF при возникновении события - PullRequest
4 голосов
/ 05 октября 2010

в моем приложении MVVM у меня есть список элементов, реализующих IDataErrorInfo и INotifyPropertyChanged

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

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

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

Как я могу форсировать валидацию таким образом?

Ответы [ 2 ]

1 голос
/ 06 октября 2010

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

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

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

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

0 голосов
/ 11 октября 2010

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

Вы можете создать подкласс ObservableCollection и добавить событие для каждого элемента. В этой ссылке есть очень хорошая реализация, предоставленная сотрудником из StackOverFlow. ObservableCollection, которая также отслеживает изменения элементов в коллекции
Это слишком хорошо, я пробовал и использовал. Это работает превосходно. Надеюсь, это поможет вам и направит вас в правильном направлении !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...