Използване на 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, в противен случай елементите на потребителския интерфейс, свързани с тях, ще не получавате известия за грешки. В моя случай беше трудно да се види проблем, защото Caliburn.Micro и AutoFac правеха много автоматично окабеляване, което беше трудно да се види в контекст на отстраняване на грешки.

person wwarby    schedule 03.11.2014