Использование INotifyDataErrorInfo со встроенным UserControl в WPF (с Caliburn.Micro)

Я унаследовал некоторый код для довольно сложного приложения WPF, которое использует Caliburn.Micro для реализации шаблона MVVM. Он использует автоматически привязываемые представления для просмотра моделей с использованием соглашений об именах Caliburn. Модели представлений наследуются от класса, который реализует INotifyDataErrorInfo, а Fluent Validation используется для создания ошибок, связанных с конкретным полем. Это работает отлично, за исключением одного сценария, когда у меня есть пользовательский элемент управления, встроенный в несколько разных представлений, и элементы пользовательского интерфейса в этом пользовательском элементе управления должны быть проверены.

Встроенный пользовательский элемент управления имеет собственную модель представления, которая не реализует INotifyDataErrorInfo. Достаточно сказать, что сообщения проверки, которые мы генерируем при проверке родительского представления, не распространяются на пользовательский интерфейс для отображения.

Я не совсем уверен, какой код мне нужно показать здесь, чтобы проиллюстрировать проблему, поэтому вопрос на самом деле более концептуальный - вопрос таков:

В моем сценарии я должен реализовывать модель представления за встроенным пользовательским элементом управления или есть какой-либо другой способ заставить родительское представление вызывать GetErrors() в его модели представления с именами свойств элементов управления, вложенных во встроенные пользовательские элементы управления?

Надеюсь, это имеет смысл - я новичок в WPF!


person wwarby    schedule 29.10.2014    source источник


Ответы (1)


В итоге я решил это. Проблема оказалась в том, что у меня была отдельная модель представления, привязанная к вложенному представлению, и эта модель представления не наследовалась от класса, реализующего INotifyDataErrorInfo. Достаточно сказать, что правило здесь, по-видимому, заключается в том, что вы можете иметь встроенные пользовательские элементы управления, которые имеют свою собственную модель представления (контекст данных) и по-прежнему получают поведение проверки, но каждая модель представления в иерархии должна реализовывать INotifyDataErrorInfo, иначе привязанные к ним элементы пользовательского интерфейса не будут работать. t получать уведомления об ошибках. В моем случае было трудно увидеть проблему, потому что Caliburn.Micro и AutoFac выполняли много автоматических подключений, которые было трудно увидеть в контексте отладки.

person wwarby    schedule 03.11.2014