Мне нужно уметь перехватывать фреймворк и выполнять такую повторную инициализацию, когда ViewModel перезагружается из кеша. Поскольку ViewModel не воссоздается, я не могу использовать методы Init(), MvxViewModel.InitFromBundle или MvxViewModel.ReloadFromBundle.MvvmCross ViewModel кэширование и повторная инициализация
Я пытаюсь отлаживать ситуацию, когда нажатие на кнопку возврата восстанавливает ViewModel с несогласованным состоянием. Может помочь какой-то MvxViewModel.OnReloading().
Есть ли способ сделать это в v3?
EDIT:
Предположим, у меня есть FirstPageViewModel, который выставляет команду, чтобы перейти к SecondPageViewModel. Основываясь на том, что я наблюдаю, если вы нажмете на кнопку «Назад» симулятора, а на SecondPageView, FirstPageViewModel не сконструирован. Вместо этого он, как мне кажется, извлекается из некоторого кеша, а затем привязывается к представлению. Этот кеш, возможно, представляет собой реализацию кэша IMvxSingleViewModel.
Таким образом, регулярный поток после конструкции ViewModel, где вы вызываете Init(), InitFromBundle() и ReloadFromBundle(), не применяется в этом сценарии. Другими словами, мне нужен способ повторной инициализации ViewModel независимо от того, была ли она только что построена или была воскрешена из кеша. Если первый, я могу использовать метод Init(). Если последнее верно, в самой ViewModel нет способа сделать это.
Это проблема:
У меня есть экземпляр ICollectionService, который передается от FirstViewModel к SecondViewModel. FirstView также содержит ListView, привязанный к этому CollectionService. Поскольку CollectionService не строго типизирован, я могу передать его и использовать соответствующий шаблон элемента для отображения его элементов в представлении.
Прежде чем показывать SecondViewModel, FirstViewModel извлекает некоторые удаленные данные и заполняет CollectionService. Когда SecondViewModel отображается, его представление отображает данные из CollectionService с использованием другого шаблона элемента. Однако, если я вернусь назад, поскольку FirstViewModel все еще ссылается на CollectionService, FirstView будет отображать данные, которые были использованы SecondViewModel, если FirstViewModel не может быть повторно инициализирован, очищая CollectionService в этом процессе. Может быть, подход неправильный, но это суть моей проблемы.
Я не знаю, имеет ли платформа разницу, поскольку я ожидал бы такого же поведения на Windows Phone и iOS, поскольку эта повторная инициализация будет происходить в модуле Core. Тем не менее, это наблюдения на Android.
TIA.
Это совсем не ясно, что вы спрашиваете, что такое «кеш», что непоследовательно в вашем состоянии, на какой платформе вы находитесь или что вы пытаетесь сделать. Примерный поток пользователей и/или некоторые примеры проблемного кода могут помочь. – Stuart
Стюарт, спасибо за ответ. Я только что редактировал свой вопрос с дополнительной информацией. –