У меня есть приложение MVVM, которое я разрабатываю до такой степени, что я готов начать собирать пользовательский интерфейс (мой клиентский код в значительной степени функционален)
Сейчас я сталкиваюсь с проблемой, что пытаюсь доставить данные своего приложения туда, где они мне нужны, чтобы они могли быть использованы моделью представления и затем привязаны к представлению.
К сожалению, похоже, что у меня либо есть несколько структурных упущений, либо мне просто придется столкнуться с реальностью того, что мне нужно распространять события и выдавать чрезмерное количество ошибок, чтобы уведомить модели представления о своих свойствах изменились.
Позвольте мне привести несколько примеров моей проблемы:
У меня есть класс «Unit», содержащийся в классе «Test», содержащийся в классе «Session», который содержится в классе «TestManager», который содержится в «TestDataModel», который используется «TestViewModel», который связан с данными моим "TestView" .... WHOA.
Теперь рассмотрим, что у Unit (нижняя часть иерархии) есть свойство с именем «Results», которое периодически обновляется, я хочу показать это моей модели представления, а затем привязать ее к моему мнению, проблема в том, что единственный способ, которым я действительно можно подумать, чтобы сделать это, чтобы увековечить события WAY вверх по цепочке, которая говорит: «Я был обновлен!» и затем запросите новое значение ... Это кажется ужасным способом сделать это. В качестве альтернативы, я мог бы зарегистрировать статическое событие и вызвать его, и сделать так, чтобы соответствующая «Модель представления модуля» получила событие и запросила обновление. Это кажется лучше ... но ... статические события? Это запретная идея?
Также, имея выражение вроде:
TestDataModel.TestManager.Session.Test.Unit.Results[i] Seems REALLY gross to have on a View Model.
Я знаю, что все это пахнет плохим дизайном, но я не могу понять, что я сделал не так? Должен ли я использовать больше объектов с однократным / контейнерным временем жизни? Зарегистрировать экземпляры объектов в статических вспомогательных контейнерах? Может быть, Мультитон? Очевидно, что это трудные вопросы, на которые нужно ответить, не будучи тесно знакомыми с существующей структурой, но если вы столкнулись с такими ситуациями, что вы сделали для рефакторинга? Должен ли я просто жить с этим, добавлять массовые мероприятия и распространять их?