2015-06-15 1 views
0

У меня есть сценарий с некоторой вложенной моделью, на которую я хочу выполнить проверку.Вложенная проверка не обновляется при изменении дочерней VM

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

Например, SiteConfiguration имеет виртуальную машину с именем SiteConfigurationViewModel.

В таком случае SiteConfigurationViewModel имеет свойство типа SiteConfiguration, которое предоставляет модель.

Корневая виртуальная машина содержит список виртуальных машин верхнего уровня, а представление (DataWindow) имеет некоторую привязку для отображения списка экземпляров виртуальных машин() и выбранного экземпляра, который пользователь может редактировать.

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

Я пробовал много вариантов (например, аннотации проверки, переопределяя ValidateFields и ValidateBusinessRules, ViewModelToModel), но я думаю, что я делаю что-то неправильно.

+0

Я добавил свойство в VM с атрибутом ViewModelToModel, и теперь он проверяет и обновляет модель, но однажды ... если я введу значение и затем сброшу его, новое предупреждение НЕ отображается в списке ошибок DataWindow , Кроме того, кнопка OK не включена/отключена в зависимости от наличия ошибок. –

ответ

0

Если вы только добавляете ошибки в модель (а не модель представления), ошибки не будут отображаться автоматически. Причина этого в том, что Catel добавляет элемент WarningAndErrorValidator для модели просмотра для вас, а не для модели (потому что вы можете скрыть некоторую проверку). Обратите внимание, что vm полностью отвечает за проверку.

Если вы используете сопоставления ViewModelToModel, Catel автоматически отобразит всю вашу валидацию (чтобы вы могли проверить на модели, отобразить ее на vm, а vm автоматически выведет все отображаемые предупреждения/ошибки).

+0

Приветствую вас. Этому мне удается работать (с ViewModelToModel), и он отлично работает. Все еще есть две проблемы, описанные выше - кнопка OK действительна, когда есть ошибки и после изменения значения от действительного до недействительного, я не вижу предупреждения (это по дизайну?) –

+0

Существует вариант для этого на ВМ. DeferValidationUntilFirstSave или что-то в этом роде. Установите значение false, и вы получите подтверждение сразу. –

+0

По-прежнему не работает после установки DeferValidationUntilFirstSaveCall = false во всех виртуальных машинах. Что я вижу, так это то, что у меня есть ошибка с ограниченным полем 'int? ': Ошибка System.Windows.Data: 7: ConvertBack не может преобразовать значение' '(type' String '). BindingExpression: Path = NewBcfId; DataItem = 'BcfConfigurationViewModel' (HashCode = -1319402970); целевым элементом является «TextBox» (Name = ''); target property is 'Text' (type 'String') FormatException: 'System.FormatException: строка ввода не была в правильном формате. Может ли это остановить распространение значений/валидацию? –