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