Что я делаю, так это сохраняю все сообщения об ошибках в словаре, проиндексированном по имени свойства, это то, откуда я читаю в индексаторе IDataErrorInfo.Этот словарь заполняется с помощью кода проверки.
Вы также можете создать коллекцию ObservableCollection, где вы заполняете любые сообщения об ошибках из значений в словаре и привязываете их к ItemsControl в вашем пользовательском интерфейсе.Или реализуйте ObservableDictionary для хранения ваших сообщений об ошибках.
Ранее я использовал окно сообщений для отображения этой коллекции ошибок, когда пользователь нажимает, например, Сохранить.