Я новичок в MVVM, поэтому, пожалуйста, извините меня, если эта проблема имеет хорошо известное решение.
Мы создаем кучу классов моделей, у которых есть некоторые основные свойства, которые загружаются спереди, а также некоторые дополнительные свойства, которые могут быть ленивы загружены по требованию, вызывая вызов веб-API (обновление: для уточнения, это был бы вызовом веб-API на лениво загруженное свойство).
Вместо того, чтобы иметь несколько моделей, кажется разумным иметь одну модель с логикой ленивой загрузки. Однако также кажется, что свойства lazy-loaded не должны блокироваться при доступе, так что, когда View связывается с ViewModel и привязывается к модели, мы не блокируем поток пользовательского интерфейса.
Как таковой, я думал о шаблоне что-то вроде того, когда к нему обращается ленивое свойство в модели, он начинает асинхронную выборку, а затем сразу возвращает значение по умолчанию (например, null
). Когда асинхронная выборка будет завершена, она поднимет событие PropertyChanged
, чтобы ViewModel/View мог повторно привязываться к выбранному значению.
Я пробовал это, и кажется, что он работает очень хорошо, но задавался вопросом:
- Есть ли какие-то подводные камни к этому подходу, о которых я еще не узнал, но столкнется с тем, что приложение будет увеличиваться по сложности?
- Существует ли существующее решение этой проблемы, встроенное в структуру или широко используемое как часть сторонней структуры?