У меня есть сценарий, в котором одновременно будут отображаться как минимум 2 экрана с одинаковым источником.На одном экране эти данные доступны только для чтения, на другом редактируются.Мне нужны данные на обоих экранах для синхронизации.Кроме того, данные могут быть изменены разными пользователями.
Допустим, что это последовательность действий:
- пользователь открывает экран A, который содержит данные только для чтения из коллекции A
- Пользователь должен добавить новые элементы в collectionA, поэтому screenB открывает
- пользователь добавляет 3 новых элемента на screenB, а затем закрывает их
- collection на screenA должен иметь новые элементы
Могут быть случаи, когда более 2 экранов содержат данные из одного и того же источника (тип сбора).
Я использую MVVM light и шаблон ViewModelLocator для представления ViewModels для Views.В настоящее время я выбираю данные в конструкторе ViewModel.Это означает, что если я кеширую экземпляр ViewMOdel для повторного использования, я получу данные только один раз, все экраны будут использовать одну и ту же коллекцию как источник, поэтому синхронизация выполняется автоматически.Это также означает, что если другой пользователь в сети изменяет данные, новые данные никогда не будут видны, поскольку данные выбираются только один раз (во время создания ViewModel).
Другой подход заключается в том, что ViewModelLocator каждый раз возвращает новый экземпляр ViewModelэто запрашивается.Это означает, что свежие данные из базы данных всегда выбираются, поэтому проблема с другими пользователями сети, меняющими данные, больше не существует.Однако в этом случае каждая ViewModel будет содержать разные экземпляры данных сбора, поэтому только синхронизация редактирования данных выполняется автоматически, добавление / удаление объекта не синхронизируется автоматически.
Итак, каков наилучший способсвежие данные получены при запросе ViewModel, а также синхронизированы данные между различными экранами?