Мы пытаемся выяснить валидацию в mvvm, выполняющем проверку в бизнес-логике или модели.
Я реализовал проверку по типу исключений в нашей бизнес-логике - упрощенную схему можно найти здесь:
Если у нас есть много входных данных, которые не зависят друг от друга, нет проблем, исключение вызывается, текстовое поле улавливает его, отмечает, что оно кратно для каждого неправильного ввода. Однако, когда у нас есть зависимые значения, у нас проблемы. например.
-
Значения Value1 и Value2 в модели не должны быть одинаковыми, поэтому у нас есть функция проверки достоверности в каждом из тех, кто ищет значение equals и генерирует исключение, если это произойдет
-
теперь, если мы установим Value1 в 0 и Value2 в 1, все будет хорошо
-
Значение 1 устанавливается в графическом интерфейсе в 1 → , этот цвет становится красным, потому что проверка других значений не запускается, поэтому Value2 в графическом интерфейсе не отображается с ошибкой
-
Значение Value2 получает значение 2 в графическом интерфейсе, теперь мы достигли допустимого состояния, но только Value2 получает подтверждение, поэтому Value1 по-прежнему отмечен как ошибочный
Есть ли общий шаблон для решения этой проблемы? мы не хотим вводить зависимость в графическом интерфейсе между двумя текстовыми полями, потому что эта логика должна присутствовать только на уровне бизнес-логики.
Вместо реализации проверки по исключению можно также реализовать интерфейс IDataErrorInfo, но проблема все еще существует, нет возможности принудительно заставлять зависящие значения снова проверять свои значения, по крайней мере, я не вижу:)
Любая помощь приветствуется
веселит, Manni
[очистка, удаление ненужного шага]
15.11.2010 - Part2
ОК, большой переосмысленный здесь, мы собираемся с бизнес-уровнями. вот наша текущая планируемая конфигурация:
(изображение немного немного масштабировано здесь, пожалуйста, откройте его в отдельном окне, чтобы показать его в полном размере)
все более или менее понятно, за исключением того, как уведомлять все модели viewmodels/model различных редакторов, если модель данных в бизнес-логике изменяется. один из способов сделать это - отслеживать клонированные модели в бизнес-логике, которая их создает. Когда модель данных изменяется с помощью фиксации бизнес-логики(), все остальные зарегистрированные клоны модели могут быть уведомлены об изменениях и распространять их дальше. в качестве альтернативы бизнес-логика может опубликовать событие, к которому все модели viewmodels подписываются, чтобы они также получили изменения - может ли кто-нибудь дать мне подсказку, что лучше?
Еще раз спасибо за помощь, извините, я так заблокирован;)