WPF — как получить доступ к количеству ошибок в модели представления?

У меня есть одна модель представления, представляющая основной вид моих приложений. Эта модель представления содержит ObservableCollection объектов модели, к которым привязана сетка в моем представлении. Каждый элемент в коллекции реализует IDataErrorInfo, который упрощает стандартный механизм проверки WPF, т. е. ошибка в модели заставляет элемент управления представлением подсвечиваться красным (в данном случае ячейка).

Моя проблема в том, что я хочу выполнить часть логики в модели представления, которой требуется доступ к количеству ошибок на странице (или, скорее, ЕСЛИ есть ошибки или нет). Я не вижу способа получить доступ к этому из самой модели представления, кажется, что вся проверка WPF содержится в представлении, верно?


person SeeNoWeevil    schedule 08.04.2014    source источник


Ответы (1)


Я не думаю, что есть что-то «встроенное» для достижения этого. Одним из вариантов является предоставление свойства каждой модели в OC, такого как IsValid, которое вы бы установили в индексированном свойстве модели IDataErrorInfo. Затем ваша виртуальная машина может использовать Linq для проверки любых моделей в OC, где IsValid=false.

Если вы хотите, чтобы ваша виртуальная машина предоставляла какое-то свойство "PageHasErrors", вам, вероятно, потребуется, чтобы виртуальная машина подписывалась на событие PropertyChange каждой модели (в частности, на свойство IsValid), предполагая, что модель реализует INPC. Затем в обработчике событий виртуальной машины вы должны обновить свойство «PageHasErrors» в зависимости от того, является ли какая-либо из моделей IsValid=false.

person Andrew Stephens    schedule 08.04.2014
comment
который вы бы установили из индексированного свойства IDataErrorInfo модели. Как мне это сделать? Каждое свойство оценивается по очереди, верно? Не знаю, как установить свойство IsValid для всего объекта. - person SeeNoWeevil; 08.04.2014
comment
В этой статье предлагается несколько креативных решений: stackoverflow.com/questions/13603243/ - person Andrew Stephens; 08.04.2014