где общие / глобальные данные идут в mvvm? - PullRequest
2 голосов
/ 25 февраля 2011

Я пытаюсь разобраться с mvvm и придумала тестовое приложение, которое, я думаю, даст мне хорошую основу. Предположим, у моего приложения есть служба, которая выходит каждую минуту и ​​получает последнюю информацию о прибытии и отлете рейса в аэропорту. Теперь предположим, что у меня есть 3 разных представления: InboundView, OutboundView и GateView. Представления «Входящий» и «Исходящий» будут просто отображать различные детали полета для входящих и исходящих рейсов, которые, я уверен, мы все видели на табло в аэропорту. GateView будет отображать аналогичную информацию о рейсе, но может быть отсортировано по воротам # вместо рейса #.

Таким образом, модель объекта Flight будет содержать детали данных полета, а также экземпляр объекта Gate, который будет соответствующим образом обновляться после прибытия рейса.

Таким образом, все 3 вида используют один и тот же сервис данных полета, и я знаю, что могу передать экземпляр этого сервиса каждой виртуальной машине, но тогда мне нужно будет подключить соответствующие события INPC для каждой модели вида, и это кажется меньше, чем идеально, так как количество просмотров / vms увеличивается.

Прямо сейчас каждая виртуальная машина использует ListCollectionView, обернутый вокруг переданной коллекции полетных данных, и я просто сортирую / фильтрую на основе входящих / исходящих и т. Д., Но я надеялся включить результаты службы в своего рода родительское представление модель, которая затем передавала бы ссылку на себя во вложенные представления, а затем я мог просто обрабатывать все события INPC и т. д. на уровне модели родительского представления, и они автоматически переходили к каждому из вложенных представлений, если данные на конкретные изменения полета (например, его ворота) вместо того, чтобы обрабатывать это отдельно в каждой из виртуальных машин.

Я изучил среду Messenger для MVVM Light, но все равно кажется, что каждая из под-виртуальных машин должна была бы зарегистрироваться для сообщения и ответить на него индивидуально.

Имеет ли это смысл? Я на правильном пути здесь?

1 Ответ

0 голосов
/ 25 февраля 2011

Таким образом, все 3 вида используют один и тот же сервис данных полета, и я знаю, что могу передать экземпляр этого сервиса каждой виртуальной машине, но тогда мне нужно будет подключить соответствующие события INPC для каждой модели вида, и это кажется меньше, чем идеально подходит по мере увеличения количества просмотров / vms.

Вам не обязательно делать это, если «служба» реализует INotifyPropertyChanged. Помните, что вы можете привязать свойство к свойству, например: {Binding Path=FlightService.Gate} или что-либо еще, что может работать. (Хотя здесь сложно узнать ваши требования.)

Я изучил среду Messenger для MVVM Light, но все равно кажется, что каждая из под-виртуальных машин должна была бы зарегистрироваться для сообщения и ответить на него индивидуально.

Да, если вы хотите использовать инфраструктуру обмена сообщениями, вам необходимо, чтобы это обрабатывалось в каждой из моделей представления. В качестве альтернативы, вы могли бы использовать некоторую форму местоположения службы или инжектора конструктора, чтобы «задействовать» службу полета. Последнее мое личное предпочтение здесь.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...